我有一个字典的列表,其中一些值是空的:
d = {'a': [1], 'b': [1, 2], 'c': [], 'd':[]}
在创建这些列表的最后,我想在返回字典之前删除这些空列表。我试着这样做:
for i in d:
if not d[i]:
d.pop(i)
但是我得到了一个RuntimeError。我知道你不能在字典中添加/删除元素,而迭代它…那有什么解决办法呢?
请参阅在迭代Python字典时修改它,以了解这会导致问题的引用以及原因。
我有一个字典的列表,其中一些值是空的:
d = {'a': [1], 'b': [1, 2], 'c': [], 'd':[]}
在创建这些列表的最后,我想在返回字典之前删除这些空列表。我试着这样做:
for i in d:
if not d[i]:
d.pop(i)
但是我得到了一个RuntimeError。我知道你不能在字典中添加/删除元素,而迭代它…那有什么解决办法呢?
请参阅在迭代Python字典时修改它,以了解这会导致问题的引用以及原因。
当前回答
dictc={"stName":"asas"}
keys=dictc.keys()
for key in list(keys):
dictc[key.upper()] ='New value'
print(str(dictc))
其他回答
Python 3不允许在迭代(使用上面的for循环)字典时删除。有各种各样的替代方案;一个简单的方法就是换线
for i in x.keys():
with
for i in list(x)
当字典在for循环中更改时,您不能遍历它。对列表进行类型转换并遍历该列表。这对我很管用。
for key in list(d):
if not d[key]:
d.pop(key)
如果字典中的值也是唯一的,那么我使用这个解决方案:
keyToBeDeleted = None
for k, v in mydict.items():
if(v == match):
keyToBeDeleted = k
break
mydict.pop(keyToBeDeleted, None)
避免“迭代时字典改变大小错误”。
例如:“当你试图删除某个键时”,
只需使用'list'和'.items()'。这里有一个简单的例子:
my_dict = {
'k1':1,
'k2':2,
'k3':3,
'k4':4
}
print(my_dict)
for key, val in list(my_dict.items()):
if val == 2 or val == 4:
my_dict.pop(key)
print(my_dict)
输出:
{'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
{'k1': 1, 'k3': 3}
这只是一个例子。根据您的情况/需求更改它。
dictc={"stName":"asas"}
keys=dictc.keys()
for key in list(keys):
dictc[key.upper()] ='New value'
print(str(dictc))