Answers:
在Python 2.x中,调用keys
会生成密钥的副本,您可以在修改时进行迭代dict
:
for i in d.keys():
请注意,这在Python 3.x中不起作用,因为它keys
返回一个迭代器而不是列表。
另一种方法是用于list
强制复制密钥。这也可以在Python 3.x中使用:
for i in list(d):
for i in d.keys()
确实可以在python 3.x 中工作,但是由于它正在对字典键的可迭代视图进行迭代,因此d.pop()
在循环期间进行调用会导致与您发现的错误相同的错误。for i in list(d)
模拟在迭代之前将键复制到列表中的python 2稍微低效的行为,适用于您这样的特殊情况。
list(d.keys())
创建与相同的输出list(d)
,调用list
a dict
返回键。该keys
呼叫(虽然不贵)是不必要的。
只需使用字典理解将相关项目复制到新字典中
>>> d
{'a': [1], 'c': [], 'b': [1, 2], 'd': []}
>>> d = { k : v for k,v in d.iteritems() if v}
>>> d
{'a': [1], 'b': [1, 2]}
为此,在Python 3
>>> d
{'a': [1], 'c': [], 'b': [1, 2], 'd': []}
>>> d = { k : v for k,v in d.items() if v}
>>> d
{'a': [1], 'b': [1, 2]}
d.iteritems()
给我一个错误。我d.items()
改用了-使用python3
您只需要使用“复制”:
这样,您就可以遍历原始词典字段,并且可以随时更改所需的字典(d dict)。它适用于每个python版本,因此更加清晰。
In [1]: d = {'a': [1], 'b': [1, 2], 'c': [], 'd':[]}
In [2]: for i in d.copy():
...: if not d[i]:
...: d.pop(i)
...:
In [3]: d
Out[3]: {'a': [1], 'b': [1, 2]}
我会尽量避免一开始就插入空列表,但是通常会使用:
d = {k: v for k,v in d.iteritems() if v} # re-bind to non-empty
如果2.7之前:
d = dict( (k, v) for k,v in d.iteritems() if v )
要不就:
empty_key_vals = list(k for k in k,v in d.iteritems() if v)
for k in empty_key_vals:
del[k]
在for循环中更改字典时,无法迭代字典。进行列表投射并遍历该列表,它对我有用。
for key in list(d):
if not d[key]:
d.pop(key)
在这种情况下,我喜欢制作一个深层副本并在修改原始字典的同时循环遍历该副本。
如果查找字段在列表中,则可以枚举列表的for循环,然后将位置指定为索引以访问原始字典中的字段。
dictc = {“ stName”:“ asas”} keys = dictc.keys()用于键入列表(键):dictc [key.upper()] =“新值” print(str(dictc))
keys
使得副本钥匙,你可以遍历”又名plural
右方向键?否则,如何迭代一个键?顺便说一句,我不是尼特采摘者,我真的很想知道这确实是一个或多个钥匙