Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按键合并dict数组_Python_Dictionary - Fatal编程技术网

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中。

使用这种方法得到的索引超出范围