4 回答
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”的方式来做到这一点。
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']}
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 字典)。
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并执行相同的添加逻辑
添加回答
举报