替换嵌套数组中的多个实例

时间:2008-11-06 14:36:01

标签: python arrays dictionary replace

我有这个python词典“mydict”,包含数组,这就是它的样子:

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

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

虽然我已经想到了几种方法,但有没有最“pythonic”的方法来实现这个目标?

3 个答案:

答案 0 :(得分:2)

for arr in mydict.values():
    for i, s in enumerate(arr):
        if s == 'example':
            arr[i] = 'someotherword'

答案 1 :(得分:2)

如果您希望保持原始状态不变,只需返回应用了修改的新词典,您可以使用:

replacements = {'example' : 'someotherword'}

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

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

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

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

答案 2 :(得分:1)

这是另一个想法:

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

我发现构建列表快速非常,但当然,如果性能很重要,则可以进行配置。