[英]How to turn multiple lists into a list of sublists where each sublist is made up of the same index items across all lists?
[英]How to combine a list of lists into a dictionary where the first sublist is mapped to corresponding values in all subsequent sublists?
我有一个列表列表,其中第一个列表是“标题”列表,其余的是数据列表。 这些“子”列表中的每一个都具有相同的大小,如下所示:
list1 = [
["Sno", "Name", "Age", "Spirit", "Status"],
[1, "Rome", 43, "Gemini", None],
[2, "Legolas", 92, "Libra", None]
]
我想将所有这些“子”列表合并到一个字典中,使用第一个“子”列表作为标题行,将行中的每个值映射到后续行中的相应值。
这就是我的输出应该是这样的:
result_dict = {
1: {"Name": "Rome", "Age": 43, "Spirit": "Gemini", "Status": None},
2: {"Name": "Legolas", "Age": 92, "Spirit": "Libra", "Status": None}
}
如您所见, 1
、 2
等是唯一的行号(它们对应于标题列表中的Sno
列)。
到目前为止,我可以使用以下代码将每个第二个元素作为键:
list1_as_dict= {p[0]:p[1:] for p in list1}
print(list1_as_dict)
哪个输出:
{
'Sno': ['Name', 'Age', 'Spirit', 'Status'],
1: ['Rome', 43, 'Gemini', None],
2: ['Legolas', 92, 'Libra', None]
}
但我不知道如何使每个数据“子”列出映射到相应标题的字典。
我怎样才能得到我想要的输出?
就像是
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)
输出
{1: {'Name': 'Rome', 'Age': 43, 'Spirit': 'Gemini', 'Status': None}, 2: {'Name': 'Legolas', 'Age': 92, 'Spirit': 'Libra', 'Status': None}}
我相信你会喜欢Pandas的。 有一点学习曲线,但它提供了很多交换 - 对该数据集的大多数操作都可以在一行代码中完成。
import pandas as pd
pd.DataFrame(list1[1:], columns=list1[0]).set_index('Sno')
输出:
Name Age Spirit Status
Sno
1 Rome 43 Gemini None
2 Legolas 92 Libra None
my_dict = {p[0]: dict((x,y) for x, y in zip(list1[0][1:], p[1:])) for p in list1[1:]}
print(my_dict)
结果是:
{1: {'Name': 'Rome', 'Age': 43, 'Spirit': 'Gemini', 'Status': None}, 2: {'Name': 'Legolas', 'Age': 92, 'Spirit': 'Libra', 'Status': None}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.