繁体   English   中英

有两个不完全相同的字典列表,需要将它们与一个非唯一键合并

[英]Have two non identical list of dictionaries and need to merge them with a non unique key

d1 = [{'del':True, 'Name':'tbl_n','node':'3'},{'del':True, 'Name':'src_n','node':'5'}]
d2 = [{'items':'23', 'column_name':'tbl_n','created':'3.34','count':0,'valid':'yes'},
{'items':'43', 'column_name':'src_n','created':'3.34','count':40,'valid':'yes'},
{'items':'22', 'column_name':'mod_n','created':'3.34','count':13,'valid':'no'}

我想将d1中的“名称”键和d2中的“ column_name”合并到d1到d2

以下是尝试的步骤之一

from collections import Counter
summed = sum((Counter({elem['column_name']: elem['val_count']}) for elem in my_dict1 + my_dict2), Counter())
print(summed)

我正在寻找的预期输出是

d3 = [{'items':23, 'Name': 'tbl_n','node':3,'created':3.34,'count':0,'valid':'yes'},{'del':True,'items':43,'Name':'src_n','node':5.'created':3.34,'count':40,'valid':'yes'},{'items':22,'column_name:'mod_n','created':3.34,'count':14,'valid':'no'}

我试图了解您的预期输出并建议您以下解决方案。 告诉我您是否还有其他期望。 关于您的代码,我分别用ld1ld2替换了d1d2标识符(“ ld”表示“词典列表”),以提高可读性:

ld1 = [{'del':True, 'Name':'tbl_n','node':'3'},
       {'del':True, 'Name':'src_n','node':'5'}]

ld2 = [{'items':'23', 'column_name':'tbl_n','created':'3.34','count':0, 'valid':'yes'},
       {'items':'43', 'column_name':'src_n','created':'3.34','count':40,'valid':'yes'},
       {'items':'22', 'column_name':'mod_n','created':'3.34','count':13,'valid':'no'}]


def mergeTwoListOfDicts(ld1, ld2):

    result = []

    for d2 in ld2:
        for d1 in ld1:
            if ('Name' in d1) and ('column_name' in d2):
                if d1['Name'] == d2['column_name']:
                    d2.pop('column_name')
                    d2.update(d1)
                    break
        result.append(d2)

    return result


print(mergeTwoListOfDicts(ld1, ld2))
# [{'items': '23', 'created': '3.34', 'count': 0,  'valid': 'yes', 'del': True, 'Name': 'tbl_n', 'node': '3'},
#  {'items': '43', 'created': '3.34', 'count': 40, 'valid': 'yes', 'del': True, 'Name': 'src_n', 'node': '5'},
#  {'items': '22', 'created': '3.34', 'count': 13, 'valid': 'no', 'column_name': 'mod_n'}]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM