我有字典[{'name':'ABC', 'jid':'1', 'eid':'3'},{'name':'ABC', 'jid':'2'}, {'name':'ABC', 'jid':'2'},{'name':'CDE', 'jid':'1'}]
如何添加相同的值以列出唯一值也必须
预期
[{'name':'ABC', 'jid':['1','2']}, {'name':'CDE', 'jid':'1'}]
答案 0 :(得分:2)
遍历字典列表:
jdict = {}
dlist = [{'name':'ABC', 'jid':'1', 'eid': 1},{'name':'ABC', 'jid':'2'}, {'name':'CDE', 'jid':'1'}]
for ddict in dlist:
if ddict['name'] not in jdict:
jdict[ddict['name']] = {}
name_jdict = jdict[ddict['name']]
for key in ddict:
if key == 'name':
continue
if key not in name_jdict:
name_jdict[key] = []
name_jdict[key].append(ddict[key])
res_list = []
for key, dict_value in jdict.items():
temp_dict = {'name': key}
for kitem, kvalue in dict_value.items():
temp_dict[kitem] = set(kvalue)
res_list.append(temp_dict)
print(res_list)
输出:
[{'name':'ABC', 'jid':['1','2'], 'eid': ['1']}, {'name':'CDE', 'jid':['1']}]
仅供参考:您可以使用defaultdict(list)
并进一步减少几行。
将最终列表放到一个集合中,以避免重复。
答案 1 :(得分:1)
您可以使用itertools完成此操作。
#import
from itertools import groupby
#your list of dict
INFO=[{'name':'ABC', 'jid':'1'},{'name':'ABC', 'jid':'2'}, {'name':'CDE', 'jid':'1'}]
# define a fuction for key
def key_func(k):
return k['name']
# sorting is need before grouping
INFO = sorted(INFO, key=key_func)
out_list=[]
#grouping by name key
for key, value in groupby(INFO, key_func):
print(key)
temp_dict={'name':key}
for item in value:
if 'jid' in temp_dict.keys():
temp_dict['jid'].append(item['jid'])
else:
temp_dict['jid']=[item['jid']]
out_list.append(temp_dict)
print(out_list)