通过嵌套值合并嵌套字典

时间:2015-12-15 18:07:58

标签: python python-2.7 dictionary

如何使用 client_id 值在Python中合并以下嵌套字典?

{
0: {'id': u'171350479985198', 'title': u'Mrs'},
1: {'id': u'171350479985198', 'title': u'Mrs'},
2: {'id': u'81675316423225', 'title': u'NOT EXISTS'},
3: {'id': u'164299819070601', 'title': u'None'},
4: {'id': u'164299819070601', 'title': u'Mrs'},
5: {'family_name': u'FN7988', 'id': u'171350479985198'}, 
6: {'family_name': u'FN1909', 'id': u'171350479985198'}, 
7: {'family_name': u'NOT EXISTS', 'id': u'81675316423225'}, 
8: {'family_name': u'FN759E', 'id': u'164299819070601'}, 
9: {'family_name': u'FN37FD', 'id': u'164299819070601'}, 
10: {'id': u'171350479985198', 'description': u'Recurrent depressive disorder'}, 
11: {'id': u'81675316423225', 'description': u'Recurrent depressive disorder'}, 
12: {'id': u'164299819070601', 'description': u'Recurrent depressive disorder'}
}

因此,我需要以下字典。

{
0: {'id': u'171350479985198', 'title': u'Mrs', 'family_name': u'FN7988', 'description': u'Recurrent depressive disorder'}, 
1: {'id': u'171350479985198', 'title': u'Mrs', 'family_name': u'FN1909', 'description': u'Recurrent depressive disorder'},
2: {'id': u'81675316423225', 'title': u'NOT EXISTS', 'family_name': u'NOT EXISTS', 'description': u'Recurrent depressive disorder'}, 
3: {'id': u'164299819070601', 'title': u'None', 'family_name': u'FN759E', 'description': u'Recurrent depressive disorder' }, 
4: {'id': u'164299819070601', 'title': u'Mrs', 'family_name': u'FN37FD', 'description': u'Recurrent depressive disorder'} 
}

1 个答案:

答案 0 :(得分:1)

我只是假设结果中的重复记录是错误的并提出以下解决方案。

result = dict()

for key in d:
    if 'id' in d[key]:
        current_id = d[key]['id']
        if current_id not in result:
            result[current_id] = dict() #init dict
        else:
            for sub_key in d[key]:
                if sub_key != 'id':
                    result[current_id][sub_key] =d[key][sub_key]

#Lastly Map back into the numbers

num_result = {}
result_key = [k for k in result]
# You can sort result key by some criteria if you want 

for key_num in xrange(0,len(result_keys)):
    result[result_key[key_num]]['id'] = result_key[key_num] #Adds the id back
    num_result[key_num] = result[result_key[key_num]]

print num_result
相关问题