python - 搜索字典键、嵌套字典中匹配的值、包含在列表中
问题描述
考虑这个列表:
d1 = [{'data': {'id': '1', 'label': 'ID #1', 'expanded': True}, 'classes': 'genesis'}, {'data': {'id': '2', 'label': 'ID #2', 'expanded': True}, 'classes': 'followerNode'}, {'data': {'id': '3', 'label': 'ID #3'}, 'classes': 'followerNode'}, {'data': {'id': '4', 'label': 'ID #4'}, 'classes': 'followerNode'}, {'data': {'id': '5', 'label': 'ID #5'}, 'classes': 'followerNode'}, {'data': {'id': '6', 'label': 'ID #6'}, 'classes': 'followerNode'}, {'data': {'id': '7', 'label': 'ID #7'}, 'classes': 'followerNode'}, {'data': {'id': '21', 'source': '2', 'target': '1'}, 'classes': 'followerEdge'}, {'data': {'id': '31', 'source': '3', 'target': '1'}, 'classes': 'followerEdge'}, {'data': {'id': '41', 'source': '4', 'target': '1'}, 'classes': 'followerEdge'}, {'data': {'id': '51', 'source': '5', 'target': '1'}, 'classes': 'followerEdge'}, {'data': {'id': '61', 'source': '6', 'target': '1'}, 'classes': 'followerEdge'}, {'data': {'id': '71', 'source': '7', 'target': '1'}, 'classes': 'followerEdge'}, {'data': {'id': '8', 'label': 'ID #8'}, 'classes': 'followerNode'}, {'data': {'id': '13', 'label': 'ID #13'}, 'classes': 'followerNode'}, {'data': {'id': '14', 'label': 'ID #14'}, 'classes': 'followerNode'}, {'data': {'id': '15', 'label': 'ID #15'}, 'classes': 'followerNode'}, {'data': {'id': '18', 'label': 'ID #18'}, 'classes': 'followerNode'}, {'data': {'id': '19', 'label': 'ID #19'}, 'classes': 'followerNode'}, {'data': {'id': '20', 'label': 'ID #20'}, 'classes': 'followerNode'}, {'data': {'id': '82', 'source': '8', 'target': '2'}, 'classes': 'followerEdge'}, {'data': {'id': '132', 'source': '13', 'target': '2'}, 'classes': 'followerEdge'}, {'data': {'id': '142', 'source': '14', 'target': '2'}, 'classes': 'followerEdge'}, {'data': {'id': '152', 'source': '15', 'target': '2'}, 'classes': 'followerEdge'}, {'data': {'id': '182', 'source': '18', 'target': '2'}, 'classes': 'followerEdge'}, {'data': {'id': '192', 'source': '19', 'target': '2'}, 'classes': 'followerEdge'}, {'data': {'id': '202', 'source': '20', 'target': '2'}, 'classes': 'followerEdge'}, {'data': {'id': '8', 'label': 'ID #8'}, 'classes': 'followerNode'}, {'data': {'id': '13', 'label': 'ID #13'}, 'classes': 'followerNode'}, {'data': {'id': '14', 'label': 'ID #14'}, 'classes': 'followerNode'}, {'data': {'id': '15', 'label': 'ID #15'}, 'classes': 'followerNode'}, {'data': {'id': '18', 'label': 'ID #18'}, 'classes': 'followerNode'}, {'data': {'id': '19', 'label': 'ID #19'}, 'classes': 'followerNode'}, {'data': {'id': '20', 'label': 'ID #20'}, 'classes': 'followerNode'}, {'data': {'id': '82', 'source': '8', 'target': '2'}, 'classes': 'followerEdge'}, {'data': {'id': '132', 'source': '13', 'target': '2'}, 'classes': 'followerEdge'}, {'data': {'id': '142', 'source': '14', 'target': '2'}, 'classes': 'followerEdge'}, {'data': {'id': '152', 'source': '15', 'target': '2'}, 'classes': 'followerEdge'}, {'data': {'id': '182', 'source': '18', 'target': '2'}, 'classes': 'followerEdge'}, {'data': {'id': '192', 'source': '19', 'target': '2'}, 'classes': 'followerEdge'}, {'data': {'id': '202', 'source': '20', 'target': '2'}, 'classes': 'followerEdge'}]
当有其他键类型(如“源”或“目标”)时,我如何搜索说“1”:
我想删除与我的任何搜索条件匹配的子字典...例如 id 为 1 的 id ...它应该删除这个:
{'data': {'id': '1', 'label': 'ID #1', 'expanded': True}, 'classes': 'genesis'}
这是我尝试过的:
[{k:v} for lst in d1 for k, v in lst.items() if (("1" not in (v.get('source', None), (v!=None))) and
("1" not in (v.get('target', None), (v!=None))) and
("1" not in (v.get('id', None), (v!=None))))]
但我得到
AttributeError: 'str' object has no attribute 'get'
解决方案
列表中的每个项目都有带有两个键值对的字典,第一个有一个字典作为值,第二个有一个字符串。当您遍历 for k, v in lst.items()
列表中的每个项目时,它会在第一个键值对上查找,但对于第二个键值对,它将看到一个字符串作为值,而不是导致问题的字典。
我认为这应该可以解决问题:
[lst for lst in d1 if "1" not in lst["data"].get('source', "None")
and "1" not in lst["data"].get('target', "None")
and "1" not in lst["data"].get('id', "None")]
或者
for lst in d1:
if "1" not in lst["data"].get('source', "None")\
and "1" not in lst["data"].get('target', "None")\
and "1" not in lst["data"].get('id', "None"):
lst
推荐阅读
- javascript - javascript添加或合并到对象
- antd - 贡献 Ant Design 核心代码库,
- python - Blender:从脚本调用自定义菜单操作
- javascript - 迭代地从nodejs中的控制台获取用户输入?
- c++ - 使用 std::cout 使程序返回不同的答案
- linux - RabbitMQ 加载页面问题(连接重置错误标头 GET/FAV)
- php - 如何在php中对jpg进行base64编码/解码
- python - 如何更改 QTableWidget 打印的大小?
- angular - 离子如何中继或拼接标签中的一些数据
- python - 如果字符串前面有数字和冒号的模式