我有一個串列串列,其中第一個串列是“標題”串列,其余的是資料串列。這些“子”串列中的每一個都具有相同的大小,如下所示:
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]
}
但我不知道如何使每個資料“子”列出映射到相應標題的字典。
我怎樣才能得到我想要的輸出?
uj5u.com熱心網友回復:
就像是
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}}
uj5u.com熱心網友回復:
我相信你會喜歡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
uj5u.com熱心網友回復:
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}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/492331.html
標籤:Python python-3.x 字典
上一篇:用字典中的值替換串列中的專案
