Python中的字典列表

1 投票
5 回答
7472 浏览
提问于 2025-04-15 20:48

我在Python中有一个字典的列表:

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

我用同样的方式往这个列表里添加了很多字典。

现在我想从这个列表中删除一个字典,而且只想删除一个。请问有什么好的方法吗?

我试过用列表的索引来删除,但当我从列表中移除一个字典后,索引就会改变,所以在随机删除后,我的索引就不再对应我想删除的字典了。我希望这样说清楚了。

也许我可以在我的字典里加一个“id”字段,这样我就可以更准确地指定要删除的字典。我会要求删除那个“id”等于我想删除的字典的“id”的字典。

我该怎么做呢?

希望我说得够清楚。抱歉,我在Python方面还是个新手。

5 个回答

1

你提到的识别那些多了一个条目的字典,确实是个不错的主意:

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']

注意,我是在给完整列表切片(也就是用[:]这种写法)赋值,而不是给列表的名字赋值。给名字赋值有时候看起来好像有效,但其实并没有改变列表的内容(只是重新绑定了一个名字),所以如果还有其他地方引用了这个列表,它们的内容不会受到影响。总之,给名字赋值(而不是用[:])没有什么好处,除非你想保持原来的对象不被其他引用修改。

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
8

一个更好的解决办法是使用一个字典里面再嵌套一个字典,并且用id属性来作为索引。这样,即使你删除了其中一个字典,其他的id依然不会改变。

撰写回答