所以我有一个字典列表,其中每个字典都有两个键值对。像
这样的东西l1 = [{'key1':'value1','key2':'value2'},
{'key1':'value1','key2':'value2'},
...
]
现在我想要的是从此列表中删除字典,只需先检查key
及其value
。我可以检查列表中是否存在整个字典,然后将其删除。但我只想检查列表中是否存在具有特定first key
的字典。这样的字典将是独一无二的。我想随后从这个列表中删除该字典。我该怎么做?
编辑:删除时,我只有一个键值对。所以我想只使用一对删除字典。如果我有两对,那么我可以做到
l1.remove({'key1':'value1', 'key2':'value2'})
但事实并非如此,因为我没有另外一对。这就是为什么我说这本词典是独一无二的。
答案 0 :(得分:6)
鉴于,
ds = [{'key1': 'value1', 'key2': 'value2'},
{'key1', 'value3', 'key2', 'value4'},
...]
您可以使用列表解析删除具有唯一键值的字典:
ds = [d for d in ds if d['key1'] != 'value1']
然后你遍历整个列表,创建一个没有该字典的新列表,而不是捕获字典。您也可以手动执行此操作:
for i, d in enumerate(ds):
if d['key1'] == 'value1':
d1 = ds.pop(i)
break
在这种情况下,您只遍历必须的内容,不要创建新列表,并捕获字典。但是,如果您真的关心性能(并且不关心订单),我建议您按照其唯一键值对字典进行分组:
ds = {'value1': {'key1': 'value1', 'key2': 'value2'},
'value3': {'key1', 'value3', 'key2', 'value4'},
...}
因为ds['value1']
是O(1)(立即),而任何遍历都是O(n)(在最坏的情况下必须遍历整个列表)。
答案 1 :(得分:2)
请勿拨打您的列表list
!
使用列表理解。
键值对
要在存在特定键值对时删除列表元素:
l1 = [{'key1':'value1','key2':'value2'},
{'key1':'value3','key2':'value4'}]
l2 = [element for element in l1 if element.get('key1', '') != 'value1']
(注意get
方法的默认返回值。)
关键礼物
要在存在特定键时删除列表元素:
l2 = [element for element in l1 if 'key1' in element]
<强>说明强>
答案 2 :(得分:0)
由于没有人提及它,因此您也可以遍历列表,并在要定位的字典上使用'del'关键字。
for i, j in enumerate(l1):
if j['key1'] whatever logic:
del l1[i]