bugfix> python > 投稿
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の 'Name'キーとd2の 'column_name'に関してd1をd2にマージしたい

以下は試されたステップの1つです

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'}

回答 1 件
  • 期待される出力を理解し、次の解決策を提案しました。何か他のものを期待しているなら教えてください。あなたのコードに関しては、 d1 を置き換えました および d2  それぞれ ld1 を持つ識別子 および ld2  (「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'}]
    
    

あなたの答え