合并到不同的词典

2024-06-01 13:20:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个这样的词典列表:

dic1 = [{'Age': 8, 'Pets Name': 'Felix', 'Species': 'Cat'}, {'Age': 57, 'Pets Name': 'Michelangelo', 'Species': 'Tortoise'}, {'Age': 12, 'Pets Name': 'Rantanplan', 'Species': 'Dog'}, {'Age': '2', 'Pets Name': 'Nemo', 'Species': 'Fish'}, {'Age': '45', 'Pets Name': 'Leonardo', 'Species': 'Tortoise'}, {'Age': 9, 'Pets Name': 'Milo', 'Species': 'Dog'}, {'Age': 57, 'Pets Name': 'Raphael', 'Species': 'Tortoise'}, {'Age': '4', 'Pets Name': 'Dory', 'Species': 'Fish'}]
dic2 = [{'Pets Names': 'Michelangelo', "Owner's Names": 'Ana'}, {'Pets Names': 'Dory', "Owner's Names": 'Eva'}, {'Pets Names': 'Rantanplan', "Owner's Names": 'Ada'}, {'Pets Names': 'Leonardo', "Owner's Names": 'Ana'}, {'Pets Names': 'Felix', "Owner's Names": 'Eva'}, {'Pets Names': 'Raphael', "Owner's Names": 'Ana'}, {'Pets Names': 'Nemo', "Owner's Names": 'Eva'}]

我需要制作第三个字典列表,即(字典的)键、主人的名字,以及它们各自宠物的年龄值。例如,给定上述两个列表,输出应为:

dic3 = [{'Ana': [57, 45, 57]}, {'Eva': [4, 8, 2]}, {'Ada': [12]}]

主要的目标是得到每个主人宠物的平均年龄,但我想我可以自己做,当我有了理想的口述。 到目前为止,我只有:

def merge_dicts(dic1,dic2):

   name = [li['Pets Name'] for li in dic1]
   age = [li['Age'] for li in dic1]
   owenrsName = [li["Owner's Names"] for li in dic2]

这给了我宠物的名字,年龄,主人的名字的列表,但我不知道它是否与最后的功能有关。你知道吗

提前谢谢。你知道吗


Tags: name列表agenamesli名字species主人
3条回答

您可以使用简单的理解:

{ name : [ d['Age'] for d in dic1 if d['Pets Name']
          in [ d2['Pets Names'] for d2 in dic2 if d2["Owner's Names"] == name ] ]
      for name in set(( d["Owner's Names"] for d in dic2)) }

使用一些快捷方式:

def merge_dicts(dic1,dic2):
    ages = { li['Pets Name']:li['Age'] for li in dic1 }
    owners = { li["Owner's Names"]:li['Pets Name'] for li in dic2 }
    result = {}
    for owner, pet in owners.items():
        if owner in result :
            result[owner].append(ages[pet])
        else:
            result[owner] = [ages[pet]]

那么您的结果就是{'Eva': [4, 8, 2]}类型的dictionary,但是如果需要,您可以使用列表理解将其返回到dict列表

    result = [ {k:v} for k,v in result ]
dic1 = [{'Age': 8, 'Pets Name': 'Felix', 'Species': 'Cat'}, {'Age': 57, 'Pets Name': 'Michelangelo', 'Species': 'Tortoise'}, {'Age': 12, 'Pets Name': 'Rantanplan', 'Species': 'Dog'}, {'Age': '2', 'Pets Name': 'Nemo', 'Species': 'Fish'}, {'Age': '45', 'Pets Name': 'Leonardo', 'Species': 'Tortoise'}, {'Age': 9, 'Pets Name': 'Milo', 'Species': 'Dog'}, {'Age': 57, 'Pets Name': 'Raphael', 'Species': 'Tortoise'}, {'Age': '4', 'Pets Name': 'Dory', 'Species': 'Fish'}]
dic2 = [{'Pets Names': 'Michelangelo', "Owner's Names": 'Ana'}, {'Pets Names': 'Dory', "Owner's Names": 'Eva'}, {'Pets Names': 'Rantanplan', "Owner's Names": 'Ada'}, {'Pets Names': 'Leonardo', "Owner's Names": 'Ana'}, {'Pets Names': 'Felix', "Owner's Names": 'Eva'}, {'Pets Names': 'Raphael', "Owner's Names": 'Ana'}, {'Pets Names': 'Nemo', "Owner's Names": 'Eva'}]



def merge_dicts(dic1,dic2):
    dict3= {}
    result = []
    name = [li['Pets Name'] for li in dic1]
    age = [li['Age'] for li in dic1]
    owenrsName = [li["Owner's Names"] for li in dic2]


    for d2 in dic2:

       pname = d2['Pets Names']
       oname = d2["Owner's Names"]

       if oname not in dict3:
            dict3[oname] = []

       for d1 in dic1:
           if d1['Pets Name'] == pname:
               dict3[oname].append(d1['Age'])
    for key,value in dict3.items():
        result.append({key:value})

    print(result)


merge_dicts(dic1,dic2)

o/p公司

[{'Ada': [12]}, {'Eva': ['4', 8, '2']}, {'Ana': [57, '45', 57]}]

相关问题 更多 >