从python中的字典列表中删除字典

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)

但事实并非如此,因为我没有另外一对.这就是为什么我说字典是独一无二的.

Dan*_*tik 7

鉴于,

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)(在最坏的情况下必须遍历整个列表).


Hug*_*lle 2

不要打电话给你的名单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)

评论

  • 标准字典是无序的,因此不存在“第一个”键之类的东西。

  • 由于 Naman 说目标字典是唯一的,因此如果列表很长,如果您手动循环它,在找到目标字典时删除目标字典,然后中断而不是从除该条目之外的每个条目中构建一个新列表,您可能会获得更好的性能。 (3认同)