Python中的dict列表
我有一个Python中的dict列表:Python中的dict列表,python,list,dictionary,Python,List,Dictionary,我有一个Python中的dict列表: dico_cfg = {'name': entry_name, 'ip': entry_ip, 'vendor': combo_vendor, 'stream': combo_stream} self.list_cfg.append(dico_cfg) 我以同样的方式在我的列表中添加了很多dict 现在我想删除列表中的一个dict和一个dict?最好的方法是什么 我尝试过列表的索引,但是当我从列表中删除一个dict时,索引是修改的,所以在一些随机删除之后
dico_cfg = {'name': entry_name, 'ip': entry_ip, 'vendor': combo_vendor, 'stream': combo_stream}
self.list_cfg.append(dico_cfg)
我以同样的方式在我的列表中添加了很多dict
现在我想删除列表中的一个dict和一个dict?最好的方法是什么
我尝试过列表的索引,但是当我从列表中删除一个dict时,索引是修改的,所以在一些随机删除之后,我的索引不再与我要在列表中删除的dict对应。我希望这是清楚的。
也许我可以在dict中添加一个“id”行,这样我就可以要求更精确地删除我想要的dict。我将要求删除dict,其中id等于我要删除的id的dict。
我该怎么做
我希望我已经够清楚了。
对不起,我是Python的新手 如果列表中有对dict的引用,
d
,则无需使用索引即可直接将其删除:
列表。删除(d)
如果列表中有对dict的引用,d
,则无需使用索引即可直接删除:
列表。删除(d)
如果您有要删除的词典的引用,可以尝试:
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
如果您有要删除的词典的引用,可以尝试:
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
更好的解决方案是使用dict of dict,由id属性索引。这样,即使删除一个dict,另一个id仍然保持不变。更好的解决方案是使用dict的dict,由id属性索引。这样,即使您删除了一个dict,另一个id仍然保持不变。如果我没有弄错,那么当您从
dict
的列表中删除一个元素时,您不希望索引发生变化。一种解决方案是使用dict
s的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.
如果我没有弄错的话,当您从dict的列表中删除一个元素时,您不希望索引发生变化。一种解决方案是使用dict
s的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.
正如您所建议的,用一个额外的词条来识别词典是一个可行的想法:
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']
请注意,我将完整列表片段([:]
语法),不分配给列表名称——后者有时可能会给人一种工作的印象,但它不会修改列表对象(只是重新绑定一个名称),因此如果有其他对列表对象的引用,就不会修改它们。无论如何,指定给名称(而不是[:]
)没有任何好处,除非您希望保持原始对象不通过其他引用进行修改。如您所建议的,用额外的条目标识词典是一个可行的想法:
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']
请注意,我将完整列表片段([:]
语法),不分配给列表名称——后者有时可能会给人一种工作的印象,但它不会修改列表对象(只是重新绑定一个名称),因此如果有其他对列表对象的引用,就不会修改它们。无论如何,指定给名称(而不是[:]
)没有任何好处,除非您希望保持原始对象不通过其他引用进行修改。是的,显然最好使用dict of dict!这更简单,我的代码更简单。来自法国的问候!是的,很明显,使用一个口述的口述真的更好!这更简单,我的代码更简单。来自法国的问候!