I持っ2のdict、元のインスタンスのために、同時に別の値に元の人のキーをマッピングするための1つ:マッピング辞書によって辞書の複数のキーを変更
元辞書
built_dict={'China':{'deportivo-cuenca-u20':{'danny':'test1'}},
'Germany':{'ajax-amsterdam-youth':{'lance':'test2'}}}
マッピング辞書
club_team_dict={'deportivo-cuenca-u20':'deportivo','ajax-amsterdam-youth':'ajax'}
私は次のコードのトンを使用する場合、それがうまく機能、O
def club2team(built_dict,club_team_dict):
for row in built_dict:
# print test_dict[row]
for sub_row in built_dict[row]:
for key in club_team_dict:
# the key of club_team_dict must be a subset of test_dict,or you have to check it and then replace it
if sub_row==key:
built_dict[row][club_team_dict[sub_row]] = built_dict[row].pop(sub_row)
return built_dict
のように、オリジナルの辞書のネストされた辞書のキーを変更し、結果
{'Germany': {'ajax': {'lance': 'test2'}}, 'China': {'deportivo': {'danny': 'test1'}}}
これまでのところは良い、しかし私は、同じに複数のキーマッピングを持つ辞書を持っている場合キーは、例えば、私のオリジナル辞書は
built_dict={'China':{'deportivo-cuenca-u20':{'danny':'test1'}},
'Germany':{'ajax-amsterdam-youth':{'lance':'test2'},
'ajax-amsterdam':{'tony':'test3'}}}
など同じ値にもっとして1つのキーマッピングとマッピング辞書、のようなものです:
club_team_dict={'deportivo-cuenca-u20':'deportivo',
'ajax-amsterdam-youth':'ajax',
'ajax-amsterdam':'ajax'}
あなたが見ることができるように、'ajax-amsterdam-youth'
と'ajax-amsterdam-youth'
両方が'ajax'
にマッピングされている、と私はそれを実行するために同じコードを使用する際のトラブルは、オリジナルの辞書のサイズが反復
RuntimeError: dictionary changed size during iteration
中に変更されていています
私は、すべてのヘルプは感謝されます。この
{'Germany': {'ajax':[{'lance': 'test2'},
{'tony' : 'test3'}]}},
'China': {'deportivo': [{'danny': 'test1'}]}}
のように同じキーのためのネストされたリストで結果を取得したいあなたに感謝し、私はfoを探し続けるだろうr自分で答える。
これはPython 3ではうまくいきません( '.keys()'は 'dのライブビューを返しますict'は中間反復の変更についても不平を言います)。 Py2とPy3の両方と互換性を持たせたい場合は、ループを 'for sub_row in tuple(built_dict [row]):'に変更して、使用しているPythonのバージョンに関係なくシャローコピーを保証します。 – ShadowRanger
ありがとうございます。リストまたはタプルを使用して、コピーを作成し、Python 2.xおよび3.xの両方で使用できます – LancelotHolmes