0

とても簡単だと思います。私がやろうとしているのは、元の辞書'code'を、値を持つ別の辞書の辞書で更新することだけです。ループの感覚が2になり、IFループをさらに短縮して答えを得ることができます。私の実際の問題では、更新しなければならない数千のdictがあります。みんなありがとう!

Python:

referencedict = {'A': 'abc', 'B': 'xyz'}

mylistofdict = [{'name': 'John', 'code': 'A', 'age': 28}, {'name': 'Mary', 'code': 'B', 'age': 32}, {'name': 'Joe', 'code': 'A', 'age': 43}]

for eachdict in mylistofdict:
    for key, value in eachdict.items():
        if key == 'code':
            eachdict[key] = referencedict[value]

print mylistofdict

出力:

[{'age': 28, 'code': 'abc', 'name': 'John'}, {'age': 32, 'code': 'xyz', 'name': 'Mary'}, {'age': 43, 'code': 'abc', 'name': 'Joe'}]
4

2 に答える 2

4

のすべての値をループする必要はありません。直接eachdict検索するだけです。code

for eachdict in mylistofdict:
    if 'code' not in eachdict:
        continue
    eachdict['code'] = referencedict[eachdict['code']]

存在するためのテストを省略できcodeます。サンプルリストには常にcodeエントリが含まれていますが、安全である方がよいと思いました。referencedict構造体でコードを検索すると、考えられるすべてのコードが使用可能であると想定されます。

ここで使用if 'code' not in eachdict: continueしました。逆も同様に有効です(if 'code' in eachdict)。ただし、この方法では、不要な場合に行を簡単に削除でき、インデントレベルを節約できます。

于 2012-06-25T14:30:34.990 に答える
2
referencedict = {'A': 'abc', 'B': 'xyz'}

mylistofdict = [{'name': 'John', 'code': 'A', 'age': 28}, {'name': 'Mary', 'code': 'B', 'age': 32}, {'name': 'Joe', 'code': 'A', 'age': 43}]

for x in mylistofdict:
   try: 
    x['code']=referencedict.get(x['code'])
   except KeyError:
       pass
print(mylistofdict)
于 2012-06-25T14:35:11.550 に答える