Python 按键合并dict数组
我有一系列的记录,每个老板都有员工名单:Python 按键合并dict数组,python,dictionary,Python,Dictionary,我有一系列的记录,每个老板都有员工名单: comp = [ {'employees': ['chris', 'samantha', 'peter'], 'boss': 'Joe'} {'employees': ['cristy', 'jebadiah', 'coco'], 'boss': 'Susan'} {'employees': ['misty', 'jemima', 'douglas'], 'boss': 'Susan'} {'employees': ['a
comp = [
{'employees': ['chris', 'samantha', 'peter'], 'boss': 'Joe'}
{'employees': ['cristy', 'jebadiah', 'coco'], 'boss': 'Susan'}
{'employees': ['misty', 'jemima', 'douglas'], 'boss': 'Susan'}
{'employees': ['arther', 'bily', 'jenkens'], 'boss': 'Susan'}
{'employees': ['cari', 'sephora', 'betrice'], 'boss': 'Billy'}
]
我需要将每个老板的员工整合到一个新的目录中,如下所示:
comp = [
{'employees': ['chris', 'samantha', 'peter'], 'boss': 'Joe'}
{'employees': ['cristy', 'jebadiah', 'coco', 'misty', 'jemima', 'douglas', 'arther', 'bily', 'jenkens'], 'boss': 'Susan'}
{'employees': ['cari', 'sephora', 'betrice'], 'boss': 'Billy'}
]
您可以使用以下选项:
>>> index = {}
>>> for i, elem in enumerate(comp[:]):
current_boss = elem['boss']
if current_boss in index:
comp[index[current_boss]]['employees'].extend(elem['employees'])
del comp[i]
else:
index[current_boss] = i
>>> comp
[{'employees': ['chris', 'samantha', 'peter'], 'boss': 'Joe'},
{'employees': ['cristy',
'jebadiah',
'coco',
'misty',
'jemima',
'douglas',
'arther',
'bily',
'jenkens'],
'boss': 'Susan'},
{'employees': ['arther', 'bily', 'jenkens'], 'boss': 'Susan'}]
不是最优雅的解决方案,但您可以使用以下代码:
comp = [
{'employees': ['chris', 'samantha', 'peter'], 'boss': 'Joe'},
{'employees': ['cristy', 'jebadiah', 'coco'], 'boss': 'Susan'},
{'employees': ['misty', 'jemima', 'douglas'], 'boss': 'Susan'},
{'employees': ['arther', 'bily', 'jenkens'], 'boss': 'Susan'},
{'employees': ['cari', 'sephora', 'betrice'], 'boss': 'Billy'}
]
comp_modified = []
for dct in comp:
boss_exists = False # Determine if boss was previously added to comp_modified
for dct2 in comp_modified:
if dct['boss'] == dct2['boss']:
boss_exists = True
for emp in dct['employees']:
dct2['employees'].append(emp)
if not boss_exists:
comp_modified.append({'employees': dct['employees'], 'boss': dct['boss']})
这将使用dct迭代最外层循环中的comp,然后使用dct2迭代下一个循环中修改的comp。在每次迭代中,如果dct['boss']的值已经添加到comp_modified中,它将把dct的employees附加到dct2['employees']。否则,它会将dct的员工添加到一个新字典中,并将其添加到comp_modified中。使用这种方法得到的索引超出范围