如何将列表的列表组合到字典中,其中第一个子列表映射到所有后续子列表中的相应值?

Zen*_*024 1 python dictionary python-3.x

我有一个列表列表,其中第一个列表是“标题”列表,其余的是数据列表。每个“子”列表的大小相同,如下所示:

list1 = [
    ["Sno", "Name", "Age", "Spirit", "Status"],
    [1, "Rome", 43, "Gemini", None],
    [2, "Legolas", 92, "Libra", None]
]
Run Code Online (Sandbox Code Playgroud)

我想将所有这些“子”列表合并到一个字典中,使用第一个“子”列表作为标题行,将行中的每个值映射到后续行中的相应值。

我的输出应该是这样的:

result_dict = {
    1: {"Name": "Rome", "Age": 43, "Spirit": "Gemini", "Status": None},
    2: {"Name": "Legolas", "Age": 92, "Spirit": "Libra", "Status": None}
}
Run Code Online (Sandbox Code Playgroud)

如您所见,12等是唯一的行号(它们对应于Sno标题列表中的列)。


到目前为止,我可以使用以下代码将每个第二个元素作为键:

list1_as_dict= {p[0]:p[1:] for p in list1}

print(list1_as_dict)
Run Code Online (Sandbox Code Playgroud)

哪个输出:

{
    'Sno': ['Name', 'Age', 'Spirit', 'Status'],
    1: ['Rome', 43, 'Gemini', None],
    2: ['Legolas', 92, 'Libra', None]
}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使每个数据“子”列出映射到相应标题的字典。

我怎样才能得到我想要的输出?

bur*_*ran 7

就像是

spam = [["Sno","Name","Age","Spirit","Status"],[1, "Rome", 43,"Gemini",None],[2,"Legolas", 92, "Libra",None]]
keys = spam[0][1:] # get the keys from first sub-list, excluding element at index 0

# use dict comprehension to create the desired result by iterating over
# sub-lists, unpacking sno and rest of the values
# zip keys and values and create a dict and sno:dict pair respectively
result = {sno:dict(zip(keys, values)) for sno, *values in spam[1:]}
print(result)
Run Code Online (Sandbox Code Playgroud)

输出

{1: {'Name': 'Rome', 'Age': 43, 'Spirit': 'Gemini', 'Status': None}, 2: {'Name': 'Legolas', 'Age': 92, 'Spirit': 'Libra', 'Status': None}}
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,看起来键没问题,但是您需要正确构造“值”,请注意,“age”可能不是唯一的,而“sno”是唯一的(根据您的说法) (2认同)