2008-11-06 61 views
3

我已经得到了这条巨蟒词典“mydict”,包括阵列,这里是什么样子:嵌套数组代替多次出现

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

我想通过更换“榜样”的所有出现“someotherword”。

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

回答

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

这个问题是主观的,因此它不应该有一个被接受的答案。上面的代码是我能想到的最简单的代码,但我不会称其为“pythonic”(可能会使用不同的优先级来执行任务,而会导致不同的代码)。 – jfs 2008-11-06 15:50:03

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的解决方案,因为它重建整个列表,而不是仅仅修改了更改的元素地点。

1

这里的另一种看法:

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

我发现的楼宇名单是非常快,但当然轮廓如果性能是很重要的。