2008-11-06 35 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] 

我發現的樓宇名單是非常快,但當然輪廓如果性能是很重要的。