Nam*_*ani 4 python dictionary list
所以我有一个字典列表,每个字典有两个键值对.就像是
l1 = [{'key1':'value1','key2':'value2'},
{'key1':'value1','key2':'value2'},
...
]
Run Code Online (Sandbox Code Playgroud)
现在我想要的是从这个列表中删除字典只是先检查key它和它value.我可以检查列表中是否存在整个字典,然后将其删除.但我只想检查列表中是否存在具有特定字典的字典first key.这样的字典将是独一无二的.我想随后从这个列表中删除该字典.我怎么做?
编辑:删除时,我只有一个键值对.所以我想只使用一对删除字典.如果我有两对,那么我就可以做到
l1.remove({'key1':'value1', 'key2':'value2'})
Run Code Online (Sandbox Code Playgroud)
但事实并非如此,因为我没有另外一对.这就是为什么我说字典是独一无二的.
鉴于,
ds = [{'key1': 'value1', 'key2': 'value2'},
{'key1', 'value3', 'key2', 'value4'},
...]
Run Code Online (Sandbox Code Playgroud)
您可以使用列表解析删除具有唯一键值的字典:
ds = [d for d in ds if d['key1'] != 'value1']
Run Code Online (Sandbox Code Playgroud)
但是接着你遍历整个列表,创建一个没有该字典的新列表,而不是捕获字典.您也可以手动执行此操作:
for i, d in enumerate(ds):
if d['key1'] == 'value1':
d1 = ds.pop(i)
break
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您只能遍历您必须的,不要创建新列表,并捕获字典.但是,如果您真的关心性能(并且不关心订单),我建议您按照其唯一键值对字典进行分组:
ds = {'value1': {'key1': 'value1', 'key2': 'value2'},
'value3': {'key1', 'value3', 'key2', 'value4'},
...}
Run Code Online (Sandbox Code Playgroud)
因为ds['value1']是O(1)(立即),而任何遍历都是O(n)(在最坏的情况下必须遍历整个列表).
不要打电话给你的名单list!
使用列表理解。
键值对
当存在特定键值对时删除列表元素:
l1 = [{'key1':'value1','key2':'value2'},
{'key1':'value3','key2':'value4'}]
l2 = [element for element in l1 if element.get('key1', '') != 'value1']
Run Code Online (Sandbox Code Playgroud)
(注意get具有默认返回值的方法)。
关键礼物
当存在特定键时删除列表元素:
l2 = [element for element in l1 if 'key1' in element]
Run Code Online (Sandbox Code Playgroud)
评论