Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python中的词典列表中删除词典_Python_List_Dictionary - Fatal编程技术网

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

从python中的词典列表中删除词典,python,list,dictionary,Python,List,Dictionary,所以我有一个字典列表,每个字典有两个键值对。差不多 l1 = [{'key1':'value1','key2':'value2'}, {'key1':'value1','key2':'value2'}, ... ] 现在我想从这个列表中删除一个字典,只需首先检查键及其值。我可以检查列表中是否存在整本词典,然后将其删除。但我只想检查列表中是否存在具有特定第一个键的词典。这样的词典将是独一无二的。我想随后从列表中删除该词典。我该怎么做 编辑:删除时,我只有一个键值

所以我有一个字典列表,每个字典有两个键值对。差不多

l1 = [{'key1':'value1','key2':'value2'},
      {'key1':'value1','key2':'value2'},
      ...
     ]
现在我想从这个列表中删除一个字典,只需首先检查
及其
。我可以检查列表中是否存在整本词典,然后将其删除。但我只想检查列表中是否存在具有特定
第一个键的词典。这样的词典将是独一无二的。我想随后从列表中删除该词典。我该怎么做

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

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

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

不要称你的列表为
list

使用列表理解

键值对

要在存在特定键值对时删除列表元素,请执行以下操作:

l1 = [{'key1':'value1','key2':'value2'},
        {'key1':'value3','key2':'value4'}]
l2 = [element for element in l1 if element.get('key1', '') != 'value1']
l2 = [element for element in l1 if 'key1' in element]
(注意带有默认返回值的
get
方法)

关键点出现

要在存在特定键时删除列表元素,请执行以下操作:

l1 = [{'key1':'value1','key2':'value2'},
        {'key1':'value3','key2':'value4'}]
l2 = [element for element in l1 if element.get('key1', '') != 'value1']
l2 = [element for element in l1 if 'key1' in element]
备注

  • 标准字典是无序的,所以没有“第一”键
    • 给定

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

      因为没有人提到它,所以您也可以在列表上循环,并在目标dict上使用'del'关键字

      for i, j in enumerate(l1):
        if j['key1'] whatever logic:
            del l1[i]
      

      您是否希望执行不同于循环浏览每个字典、检查字典并在必要时删除字典的操作?是的,我希望避免循环浏览整个列表并检查每个字典的第一个键。字典没有任何顺序。所以第一个键可以是任何值我假设当Naman说“first_key”时,这是他正在检查的一个特定字段。dict中没有第一个键,dict是无序的。我做了两个答案,因为问题在我打字时被编辑过。因为Naman说目标dict是唯一的,如果列表很长,您可能会获得更好的性能,如果您不是手动循环,而是在找到目标dict时将其删除,然后断开,而不是从每个条目中构建一个新列表,除了一个条目。我已进行了编辑,以使其更清晰。请看。由于限制,我无法再制作一个列表,如果是这样的话,@Dan Gittik的答案可能是最好的。