python-3.x 如何通过迭代从两个具有不同键和值的字典创建一个新字典?

oymdgrw7  于 2022-12-14  发布在  Python
关注(0)|答案(1)|浏览(117)

我有两个字典作为输入。第一个包含作为键和作为值的pin号-特定代码的概率。

`dict_1={
8063: {'code15': 99.61, 'code17': 96.14}, 9621: {'15': 88.59}, 1583: {'code17': 99.37, 'code14':87.37}, 
7631: {'code17': 99.88}, 4345: {'code11': 99.97, 'code12': 99.93},  1799: {'code11': 99.8,   'code12': 99.18},
3604: {'code17': 98.77}, 1098: {'code12': 99.96}, 3752: {'code11': 99.95}}`

第二个以簇作为键,以端号列表和字典中的名称作为值。

`dict_2={ 0: {
'count': 4,
'id': [{'pin': 8063,'name': 'John'},
            {'pin': 9621,'name': 'Maria'},
            {'pin': 1583,'name': 'Peter'},
           {'pin': 7631,'name': 'Jess'}]},
3: {
'count': 5,
'id': [
        {'pin': 4345,'name': 'George'},
        {'pin': 1799,'name': 'Kevin'},
           {'pin': 3604,'name': 'Sarah'},
            {'pin': 1098,'name': 'Stewie'},
            {'pin': 3752, 'name': 'Jan'}]}
}`

我想创建一个字典,将dict_2中的聚类作为键和值--一个字典,将dict_1中的代码作为键,将列表中的概率、引脚和名称作为值。

`merged_dict =    {
0: {'code15': [99.61, 8063, 'John', 88.59, 9621,'Maria'],
'code17':[99.37, 1583, 'Peter', 96.14, 8063, 'John',99.88, 7631, 'Jess', 98.77, 3604, 'Sarah'],
'code14':[87.37, 1583, 'Peter'] },
3: {'code11': [99.97, 4345, 'George', 99.8,  1799, 'Kevin', 99.95, 3752, 'Jan'],
'code12':[99.93, 4345, 'George', 99.18,  1799, 'Kevin', 99.96,  1098, 'Stewie']}
}`

我试过用pin把字典合并成一个公共元素,但是没有成功。

ldioqlga

ldioqlga1#

下面是实现该结果的求解函数:

def merge_dict(dict_1, dict_2):
    dict_3 = {}
    for cluster, data in dict_2.items():
        dict_3[cluster] = {}
        for pin in data['id']:
            for code, prob in dict_1[pin['pin']].items():
                if code in dict_3[cluster]:
                    dict_3[cluster][code][0] += prob
                    dict_3[cluster][code].append(pin['pin'])
                    dict_3[cluster][code].append(pin['name'])
                else:
                    dict_3[cluster][code] = [prob, pin['pin'], pin['name']]
    return dict_3

相关问题