【问题标题】:List of dict in PythonPython中的dict列表
【发布时间】:2010-03-24 14:36:08
【问题描述】:

我有一个 Python 中的 dict 列表:

dico_cfg = {'name': entry_name, 'ip': entry_ip, 'vendor': combo_vendor, 'stream': combo_stream}
self.list_cfg.append(dico_cfg)

我以同样的方式在我的列表中附加了很多 dict。

现在我想在这个列表中删除一个字典并且只删除一个字典?最好的方法是什么?

我已经尝试使用列表的索引,但是当我从列表中删除一个字典时,索引会被修改,所以在随机删除之后,我的索引不再对应于我想要删除的字典列表。我希望这很清楚。 也许我可以在我的字典中添加一个“id”行,这样我就可以要求更珍贵地删除我想要的字典。我会要求删除 id 等于我要删除的 id 字典的字典。 我该怎么做?

我希望我足够清楚。 抱歉,我是 Python 的新手。

【问题讨论】:

    标签: python list dictionary


    【解决方案1】:

    更好的解决方案是使用 dict 的 dict 代替,由 id 属性索引。这样,即使您删除了一个 dict,另一个 id 仍然保持不变。

    【讨论】:

      【解决方案2】:

      如果您对要删除的字典有引用,可以尝试:

      self.list_cfg.remove( your_dictionary )
      

      如果您没有任何参考,则必须先尝试找到它:

      for d in self.list_cfg:
          if d['name']=='Some name': # or some other check to identify your dict
              self.list_cfg.remove(d)
              break
      

      【讨论】:

        【解决方案3】:

        如果我理解正确,您不希望在从 listdicts 中删除元素时更改索引。一种解决方案是改用dicts 中的dict

        dictOne = {'foo':'bar'}
        dictTwo = {'bar':'foo'}
        dictOfDicts = {0:dictOne, 1:dictTwo} #and so on
        
        #now, del(dict[1]) will remove your element without affecting the indices of the other ones.
        

        【讨论】:

        • 是的,显然使用 dicts 的 dict 真的更好!它更容易,我的代码更简单。来自法国的问候!
        【解决方案4】:

        按照您的建议,用一个额外的条目来识别字典是一个可行的想法:

        dico_cfg = {'name': entry_name, 'ip': entry_ip, 'vendor': combo_vendor,
                    'stream': combo_stream, 'id': 'dico_cfg'}
        self.list_cfg.append(dico_cfg)
        

        以后

        self.list_cfg[:] = [d for d in self.list_cfg if d.get('id') != 'dico_cfg']
        

        请注意,我将分配给 完整列表切片[:] 语法),分配给列表 name --后者有时可能给人一种工作的印象,但它不会修改列表对象(只是重新绑定一个名称),因此如果有其他对列表对象的引用,它们将不会被修改。无论如何,分配给名称(而不是 [:])没有任何优势除非您希望通过其他引用保持原始对象不被修改。

        【讨论】:

          【解决方案5】:

          如果列表中有一个dict的引用,d,可以直接删除,不需要使用索引:

          list.remove(d)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-06-17
            • 2021-11-20
            • 2017-02-07
            • 2018-03-31
            • 1970-01-01
            • 2013-06-02
            相关资源
            最近更新 更多