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

时间:2015-06-26 08:10:53

标签: python list dictionary

所以我有一个字典列表,其中每个字典都有两个键值对。像

这样的东西
l1 = [{'key1':'value1','key2':'value2'},
      {'key1':'value1','key2':'value2'},
      ...
     ]

现在我想要的是从此列表中删除字典,只需先检查key及其value。我可以检查列表中是否存在整个字典,然后将其删除。但我只想检查列表中是否存在具有特定first key的字典。这样的字典将是独一无二的。我想随后从这个列表中删除该字典。我该怎么做?

编辑:删除时,我只有一个键值对。所以我想只使用一对删除字典。如果我有两对,那么我可以做到

l1.remove({'key1':'value1', 'key2':'value2'})

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

3 个答案:

答案 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]