如何合并两个嵌套列表作为字典?

时间:2020-07-08 12:40:35

标签: python function

我一直在试图了解此问题的工作原理,但是我不知道如何将两个嵌套列表合并到字典中。

我需要创建一个功能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"]]}

3 个答案:

答案 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']]}

我发现它容易得多!

相关问题