3

配列を含むこのpython辞書「mydict」を持っています。これは次のようになります。

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

「example」をすべて「someotherword」に置き換えたいと思います。

私はすでにそれを行ういくつかの方法を考えることができますが、これを達成するための最も「pythonic」な方法はありますか?

4

3 に答える 3

2

元の辞書をそのままにして、変更を適用した新しい辞書を返したい場合は、次を使用できます。

replacements = {'example' : 'someotherword'}

newdict = dict((k, [replacements.get(x,x) for x in v]) 
                for (k,v) in mydict.iteritems())

これには、新しい単語を置換辞書に追加するだけで簡単に拡張できるという利点もあります。既存の dict をその場で変更したい場合は、同じアプローチを使用できます。

for l in mydict.values():
    l[:]=[replacements.get(x,x) for x in l]

ただし、変更された要素をその場で変更するだけでなく、リスト全体を再構築するため、おそらくJF Sebastian のソリューションよりも遅くなるでしょう。

于 2008-11-06T22:15:59.557 に答える
2
for arr in mydict.values():
    for i, s in enumerate(arr):
        if s == 'example':
            arr[i] = 'someotherword'
于 2008-11-06T15:13:48.007 に答える
1

別の見方を次に示します。

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

リストの作成は非常に高速であることがわかりましたが、パフォーマンスが重要な場合はもちろんプロファイルを作成します。

于 2008-11-07T05:18:17.457 に答える