为了账号安全,请及时绑定邮箱和手机立即绑定

如何合并列表以创建 python 字典

如何合并列表以创建 python 字典

墨色风雨 2022-11-18 14:12:26
所以我尝试了很多方法来做到这一点,但找不到有效的解决方案。在这个问题中,我有两个 python 数组,我想加入它们来创建一个大字典。它会是这样的:`list1 = [[2, "ford"],[4,"Ferrari"],[3, "Mercedes"],[1, "BMW"]]``list2 = [[4, "mustang"],[3,"LaFerrari"],[2,"CLA"],[1,"M5"],[6,"opel"]]`我想要的结果是一本看起来像这样的字典:`result = {1: ["BMW","M5"], 2: ["Ford","CLA"], 3: ["Mercedes","LaFerrari"], 4: ["Ferrari","Mustang"], 6:["Opel"]}`所以它基本上只需要根据“键”(这只是数组中的 [0] 位置)合并这两个数组
查看完整描述

4 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

我对 Python 也很陌生,但我认为如果两个列表具有相同的键,这样的事情应该有效:


list1 = [

    [1, "ford"],

    [2, "Ferrari"],

    [3, "Mercedes"],

    [4, "BMW"]

]

list2 = [

    [1, "mustang"],

    [2, "LaFerrari"],

    [3, "CLA"],

    [4, "M5"]

]

dict1 = dict(list1)

dict2 = dict(list2)

result = {}

for key,val in dict1.items():

    result[key] = [val]

for key, val in dict2.items():

    result[key].append(val)

print(result)

输出


{1: ['ford', 'mustang'], 2: ['Ferrari', 'LaFerrari'], 3: ['Mercedes', 'CLA'], 4: ['BMW', 'M5']}

如前所述,我也是新手,所以可能有一种更“pythonic”的方式来做到这一点。


查看完整回答
反对 回复 2022-11-18
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

利用collections.defaultdict


from collections import defaultdict


result = defaultdict(list)

for k,v in list1 + list2:

    result[k].append(v)


print (dict(result))

#{2: ['ford', 'CLA'], 4: ['Ferrari', 'mustang'], 3: ['Mercedes', 'LaFerrari'], 1: ['BMW', 'M5'], 6: ['opel']}


查看完整回答
反对 回复 2022-11-18
?
MYYA

TA贡献1868条经验 获得超4个赞

看起来collections.defaultdict我会做的任务:


import collections

list1 = [

[1, "ford"],

[2,"Ferrari"],

[3, "Mercedes"],

[4, "BMW"]

]

list2 = [

[1, "mustang"],

[2,"LaFerrari"],

[3,"CLA"],

[4,"M5"]

]

result = collections.defaultdict(list)

for key, value in list1:

    result[key].append(value)

for key, value in list2:

    result[key].append(value)

result = dict(result)

print(result)

输出:


{1: ['ford', 'mustang'], 2: ['Ferrari', 'LaFerrari'], 3: ['Mercedes', 'CLA'], 4: ['BMW', 'M5']}

在这里我使用defaultdict了lists,不像常见的,dict如果你尝试用键下的值做一些还不存在的事情,它确实放置了list()ie empty list,然后做请求的动作(append在这种情况下是 ing )。最后我把它转换成dict只是为了满足你的要求(创建一个 python 字典)。


查看完整回答
反对 回复 2022-11-18
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

首先,dict使用 中的值创建一个list1。然后用 中的值更新 中的lists ,或者为 中不存在的键创建新的 s :dictlist2listlist2list1


result = {i: [j] for i, j in list1} # create initial dict from all values in list1

for i, j in list2:

    if i in result:

        result[i].append(j) # add to preexisting list corresponding to key

    else:

        result[i] = [j] # create new list corresponding to key

如果您list的 s 将有多个值,您可以在单独函数中处理添加逻辑的地方使用它:


result = {}

def add_to_dict(d, key, val):

    if key in d:

        d[key].append(val)

    else:

        d[key] = [val]


for el in (list1 + list2):

    key, *vals = el

    for val in vals:

        add_to_dict(result, key, val)

在这里,不是假设每个子列表只有 2 个元素,我们可以将键解压为第一个元素,将其余元素解压到一个list名为vals. 然后,我们可以迭代list并执行相同的添加逻辑


查看完整回答
反对 回复 2022-11-18
  • 4 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信