我一直在试图了解此问题的工作原理,但是我不知道如何将两个嵌套列表合并到字典中。
我需要创建一个功能Combine()。如果我有一个名为info的嵌套列表,而我还有另一个称为detail的嵌套列表。我需要结合这两个嵌套列表作为字典,并返回字典。我实际上并不知道如何启动我的代码。因为我实际上并不知道如何将嵌套列表合并为字典。
info = [["Kean", 36, "Comp Sci", "Dept 2"], ["Ethan", 24, "Engineer", "Dept 5"], ["Kin", 23, "Med Tech", "Dept 1"]]
detail = [("Kean", ['good', "very good", "pass"]), ("Ethan", ["fail", "good", "fail"])]
输出应如下所示:
{"Kean": [["Kean", 36, "Comp Sci", "Dept 2"], ['good', "very good", "pass"]], 'Ethan': [["Ethan", 24, "Engineer", "Dept 5"], ["fail", "good", "fail"]]}
答案 0 :(得分:1)
使用dict.setdefault
例如:
result = {}
info = [["Kean", 36, "Comp Sci", "Dept 2"], ["Ethan", 24, "Engineer", "Dept 5"], ["Kin", 23, "Med Tech", "Dept 1"]]
detail = [("Kean", ['good', "very good", "pass"]), ("Ethan", ["fail", "good", "fail"])]
for key, *value in info + detail:
result.setdefault(key, []).append(value)
print(result)
输出:
{'Ethan': [[24, 'Engineer', 'Dept 5'], [['fail', 'good', 'fail']]],
'Kean': [[36, 'Comp Sci', 'Dept 2'], [['good', 'very good', 'pass']]],
'Kin': [[23, 'Med Tech', 'Dept 1']]}
您也可以使用collections.defaultdict
例如:
from collections import defaultdict
result = defaultdict(list)
for key, *value in info + detail:
result[key].append(value)
输出:
defaultdict(<class 'list'>,
{'Ethan': [[24, 'Engineer', 'Dept 5'], [['fail', 'good', 'fail']]],
'Kean': [[36, 'Comp Sci', 'Dept 2'],
[['good', 'very good', 'pass']]],
'Kin': [[23, 'Med Tech', 'Dept 1']]})
答案 1 :(得分:0)
假定只应合并匹配的名称(如OP的预期输出所示)。这会起作用。
info = [["Kean", 36, "Comp Sci", "Dept 2"], ["Ethan", 24, "Engineer", "Dept 5"], ["Kin", 23, "Med Tech", "Dept 1"]]
detail = [("Kean", ['good', "very good", "pass"]), ("Ethan", ["fail", "good", "fail"])]
outdict = {}
for i in info:
nameInfo = i[0]
for j in detail:
nameDetail = j[0]
if nameDetail == nameInfo:
outdict[nameDetail] = [i, j[1]]
print(outdict)
输出:
{'Kean': [['Kean', 36, 'Comp Sci', 'Dept 2'], ['good', 'very good', 'pass']], 'Ethan': [['Ethan', 24, 'Engineer', 'Dept 5'], ['fail', 'good', 'fail']]}
侧注;就处理时间而言,这可以更有效地完成。但是,如原始问题所要求的那样,对于较小的样本量,这可以按预期进行。
答案 2 :(得分:0)
您可以这样做:
info = [["Kean", 36, "Comp Sci", "Dept 2"], ["Ethan", 24, "Engineer", "Dept 5"], ["Kin", 23, "Med Tech", "Dept 1"]]
detail = [("Kean", ['good', "very good", "pass"]), ("Ethan", ["fail", "good", "fail"])]
result={element[0]:[element] for element in info}
这将为您提供以名称为键,信息为值的字典
for name in detail:
if name[0] in result.keys():
result[name[0]].append(name[1])
print(result)
我们要做的是检查结果键中的名称,并将详细信息附加在其值中。
{'Kean': [['Kean', 36, 'Comp Sci', 'Dept 2'], ['good', 'very good', 'pass']], 'Ethan': [['Ethan', 24, 'Engineer', 'Dept 5'], ['fail', 'good', 'fail']], 'Kin': [['Kin', 23, 'Med Tech', 'Dept 1']]}
我发现它容易得多!