3

我有这个 python 字典“mydict”,包含数组,它看起来像这样:

mydict = dict(
    one=['foo', 'bar', 'foobar', 'barfoo', 'example'], 
    two=['bar', 'example', 'foobar'], 
    three=['foo', 'example'])

我想用“someotherword”替换所有出现的“example”。

虽然我已经可以想到几种方法来做到这一点,但是否有一种最“pythonic”的方法来实现这一点?

4

3 回答 3

2
for arr in mydict.values():
    for i, s in enumerate(arr):
        if s == 'example':
            arr[i] = 'someotherword'
于 2008-11-06T15:13:48.007 回答
2

如果您想保持原始状态不变,只返回一个应用了修改的新字典,您可以使用:

replacements = {'example' : 'someotherword'}

newdict = dict((k, [replacements.get(x,x) for x in v]) 
                for (k,v) in mydict.iteritems())

这也有一个优点,即只需将新单词添加到替换字典即可轻松扩展它们。如果你想改变一个现有的字典,你可以使用相同的方法:

for l in mydict.values():
    l[:]=[replacements.get(x,x) for x in l]

然而,它可能会比JF Sebastian 的解决方案慢,因为它会重建整个列表,而不是仅仅修改已更改的元素。

于 2008-11-06T22:15:59.557 回答
1

这是另一种看法:

for key, val in mydict.items():
    mydict[key] = ["someotherword" if x == "example" else x for x in val]

我发现构建列表的速度非常快,但如果性能很重要,当然会配置文件。

于 2008-11-07T05:18:17.457 回答