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

3 投票
3 回答
458 浏览
提问于 2025-04-11 09:34

我有一个叫“mydict”的Python字典,它里面包含了一些数组,长得像这样:

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

我想把里面所有的“example”都换成“someotherword”。

虽然我已经想到了一些方法来做到这一点,但有没有一种更“Python风格”的方法呢?

3 个回答

1

这是另一种看法:

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

我发现创建列表是非常快的,不过如果性能很重要,还是建议你做一下性能测试。

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的方案慢,因为它是重建整个列表,而不是只修改那些变化的元素。

2

这段内容是关于编程问题的讨论,通常在StackOverflow上,程序员们会分享他们遇到的困难和解决方案。这里面可能会涉及到一些代码示例和技术细节,但我们会尽量用简单的语言来解释。

首先,大家在编程的时候,可能会遇到一些错误或者不明白的地方。这时候,很多人会去网上查找答案,StackOverflow就是一个很好的地方。在这里,程序员们可以提问,也可以回答别人的问题。

在提问的时候,最好能把问题描述清楚,提供一些相关的代码,这样别人才能更好地理解你的问题并给出帮助。回答问题的人通常会根据你提供的信息来判断问题的根源,并给出建议或者解决方案。

总之,StackOverflow是一个互帮互助的社区,大家在这里分享经验,解决问题,帮助彼此进步。

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

撰写回答