【问题标题】:Replacing multiple occurrences in nested arrays替换嵌套数组中的多次出现
【发布时间】:2010-09-21 02:22:32
【问题描述】:

我有这个 python 字典“mydict”,包含数组,如下所示:

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

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

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

【问题讨论】:

    标签: python arrays dictionary replace


    【解决方案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's 解决方案慢,因为它会重建整个列表,而不是仅仅修改已更改的元素。

      【讨论】:

        【解决方案3】:
        for arr in mydict.values():
            for i, s in enumerate(arr):
                if s == 'example':
                    arr[i] = 'someotherword'
        

        【讨论】:

        • 这个问题是主观的,因此它不应该有一个公认的答案。上面的代码是我为手头的 specific 任务想到的最简单的代码,但我不会称之为最“pythonic”的代码(一个任务可能使用不同的优先级,它会导致不同的代码。)
        猜你喜欢
        • 2018-10-06
        • 1970-01-01
        • 2022-10-23
        • 2021-01-10
        • 1970-01-01
        • 2021-09-07
        • 1970-01-01
        • 2021-09-08
        • 2018-02-20
        相关资源
        最近更新 更多