[英]how to convert from list of lists to a dictionary
嗨:) 我有這個表,我需要將它轉換成一個字典,其中第一行是鍵,然后表的 rest 中的每個值都是值,但每次都遍歷它們。 我有這張桌子:
my_table = [["Account Manager", "Name", "BP", "Contact", "Quote Name", "Type", "Status", "Total"],
["bubble", "kwlak", "5677", "conn", "987", "butter", "fish", "fill", "stat", "total"],
["rose", "kwlak", "5677", "conn", "987", "butter", "fish", "fill", "stat", "total"],
["purple", "kwlak", "5677", "conn", "987", "butter", "fish", "fill", "stat", "total"],
["dark", "kwlak", "5677", "conn", "987", "butter", "fish", "fill", "stat", "total"],
["star", "kwlak", "5677", "conn", "987", "butter", "fish", "fill", "stat", "total"],
["asmr", "kwlak", "5677", "conn", "987", "butter", "fish", "fill", "stat", "total"],]
這是用於迭代它的代碼:
dict_from_table = {}
for position, key in enumerate(my_table[0]):
dict_from_table[key] = []
for value_row in my_table[1:2]:
dict_from_table[key].append(value_row[position])
print(dict_from_table)
這是來自它的output:
{'Account Manager': ['bubble'], 'Name': ['kwlak'], 'BP': ['5677'], 'Contact': ['conn'], 'Quote Name': ['987'], 'Type': ['butter'], 'Status': ['fish'], 'Total': ['fill']}
我需要它通過所有列表到 go 並為鍵(帳戶管理器、名稱等)返回每個值一次,但我也不希望它以列表的形式返回值,我希望它在同一個字典中按鍵。 我需要另一個for循環嗎?
你的嵌套循環是倒置的。 由於您的鍵是固定的,因此從這些鍵構建一個空字典,並將空列表作為值:
In [7]: my_table = [["Account Manager", "Name", "BP", "Contact", "Quote Name", "Type", "Status", "Total"],
...: ["bubble", "kwlak", "5677", "conn", "987", "butter", "fish", "fill", "stat", "total"],
...: ["rose", "kwlak", "5677", "conn", "987", "butter", "fish", "fill", "stat", "total"],
...: ["purple", "kwlak", "5677", "conn", "987", "butter", "fish", "fill", "stat", "total"],
...: ["dark", "kwlak", "5677", "conn", "987", "butter", "fish", "fill", "stat", "total"],
...: ["star", "kwlak", "5677", "conn", "987", "butter", "fish", "fill", "stat", "total"],
...: ["asmr", "kwlak", "5677", "conn", "987", "butter", "fish", "fill", "stat", "total"],]
...:
In [8]: keys = my_table[0]
In [9]: result = {k:[] for k in keys}
然后循環遍歷表的 rest:
In [10]: for row in my_table[1:]:
...: for k,v in zip(keys, row):
...: result[k].append(v)
...:
In [11]: result
Out[11]:
{'Account Manager': ['bubble', 'rose', 'purple', 'dark', 'star', 'asmr'],
'Name': ['kwlak', 'kwlak', 'kwlak', 'kwlak', 'kwlak', 'kwlak'],
'BP': ['5677', '5677', '5677', '5677', '5677', '5677'],
'Contact': ['conn', 'conn', 'conn', 'conn', 'conn', 'conn'],
'Quote Name': ['987', '987', '987', '987', '987', '987'],
'Type': ['butter', 'butter', 'butter', 'butter', 'butter', 'butter'],
'Status': ['fish', 'fish', 'fish', 'fish', 'fish', 'fish'],
'Total': ['fill', 'fill', 'fill', 'fill', 'fill', 'fill']}
雖然請注意,這假設您在第一行中的鍵與 rest 對齊......示例數據沒有,但我認為這只是一個轉錄錯誤。
您可以使用zip
來“轉置”表格(切換行和列):
output = {column[0]: column[1:] for column in zip(*my_table)}
(或者如果您需要一個列表而不是元組,請使用list(column[1:])
。)
但是,如果您對表數據進行大量操作,請考慮使用pandas
。 您可以像這樣創建 dataframe:
import pandas as pd
df = pd.DataFrame(my_table[1:], columns=my_table[0])
然后將其導出回這樣的列表字典:
output = df.to_dict("list")
(您需要首先確保每行中的列標題與單元格的數量相同。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.