在Python中,如何遍历字典并修改某个值?

111 投票
3 回答
182570 浏览
提问于 2025-04-15 19:36

如果这个值是 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()

可以参考 这篇帖子。

撰写回答