在Python中,如何遍历字典并修改某个值?
如果这个值是 None,我想把它改成 ""(空字符串)。
我开始是这样做的,但我忘记了:
for k, v in mydict.items():
if v is None:
... right?
3 个回答
15
列表推导式通常运行得更快,而且在迭代的时候不会修改 mydict
,这点很有好处:
mydict = dict((k, v if v else '') for k, v in mydict.items())
18
你可以创建一个字典推导式,只包含那些值为None的元素,然后再把它更新回原来的字典里。
tmp = dict((k,"") for k,v in mydict.iteritems() if v is None)
mydict.update(tmp)
更新 - 做了一些性能测试
经过测试,从100到10,000个项目的字典,里面有不同百分比的None值,Alex的方案整体上大约比这个方案快两倍。
183
for k, v in mydict.iteritems():
if v is None:
mydict[k] = ''
在更一般的情况下,比如你要添加或删除键的时候,直接改变你正在遍历的容器的结构可能不太安全。这时候,使用一个独立的列表副本来遍历 items
可能更稳妥。不过,如果你只是想在某个已有的索引位置赋一个新值,那是没有问题的。所以在 Python 2.x 中,最好用 iteritems
。
但是在Python3中,使用这个代码会出现 AttributeError: 'dict' object has no attribute 'iteritems'
的错误。这时候应该用 items()
来代替 iteritems()
。
可以参考 这篇帖子。