替换嵌套数组中的多个出现次数

3

我有一个名为“mydict”的Python字典,其中包含数组,它看起来像这样:

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

我希望将所有出现的"example"替换为"someotherword"。

虽然我已经想到了几种方法,但是否有一种最符合Python风格的方法来实现这个目标?

3个回答

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

这个问题是主观的,因此不应该有一个被接受的答案。上面的代码是我能想到的针对特定任务最简单的代码,但我不会称它为最“Pythonic”的代码(对于该任务,人们可能会使用不同的优先级,从而导致不同的代码)。 - jfs

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]

然而,它可能会比J.F Sebastian的解决方案慢,因为它重新构建整个列表,而不仅仅是在原地修改更改的元素。


1

这里有另一种看法:

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

我发现构建列表非常快,但当然如果性能很重要,则需要进行分析。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接