如何将值作为列表添加到键

时间:2020-11-10 06:42:53

标签: python

我有字典[{'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'}]

2 个答案:

答案 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)并进一步减少几行。

EDIT2

将最终列表放到一个集合中,以避免重复。

答案 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)