1
私は辞書のセットを持っています: そして私はkey:userIdと同じ値を持つ雑誌をマージします。 私は知っている、セットで私は同じuserIdで1つまたは2つの辞書を見つけることができます。 マージされた辞書のみが私のために紹介されています。 私のコードは機能しますが、私は知りたいのですが、他のよりエレガントな方法かもしれません。 私の例(下記)では、辞書には辞書がほとんどなく、各辞書にはいくつかの位置があります。 辞書の非常に大きなセットでそれを使用したいと思っています。マージ後、辞書に〜30個のelemntが必要です。どのようにこの同じ要素(キー:val)と2つの辞書をマージする
set_of_dict=[
{'prop1':'firstName','prop2':'lastname','userId':'100','prop3':'somefield'},
{'prop1':'value1','prop2':'value2','userId':'200','prop3':'value3'},
{'prop4':'email','prop5':'www','userId':'100','prop6':'blah'},
{'prop4':'abc','prop5':'qaq','userId':'200','prop6':'xx'},
{'prop1':'value1','prop2':'value2','userId':'400','prop3':'value3'},
{'prop4':'value4','prop5':'ssss','userId':'484','prop6':'val66'}]
"""
#output:
result=[
{'prop1':'firstName','prop2':'lastname','userId':'100','prop3':'somefield','prop4':'email','prop5':'www','prop6':'blah'}},
{'prop1':'value1','prop2':'value2','userId':'200','prop3':'value3','prop4':'abc','prop5':'qaq','userId':'200','prop6':'xx'}
]
"""
temp={}
result=[]
list_of_merged_id=[]
lastStep=[]
for j in set_of_dict:
if not any(b['userId'] == j['userId'] for b in result):
result.append(j)
else:
for item in result:
if item.has_key('userId') and item['userId']==j.get('userId'):
item.update(j)
list_of_merged_id.append(j.get('userId'))
for one in result:
if one['userId'] in list_of_merged_id:
lastStep.append(one)
else:
print str(one['userId']) + ": no merged - some data has been lost"
for a in lastStep:
print a