Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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中的dict列表_Python_List_Dictionary - Fatal编程技术网

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时,索引是修改的,所以在一些随机删除之后

我有一个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时,索引是修改的,所以在一些随机删除之后,我的索引不再与我要在列表中删除的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!这更简单,我的代码更简单。来自法国的问候!是的,很明显,使用一个口述的口述真的更好!这更简单,我的代码更简单。来自法国的问候!