簡體   English   中英

如何從列表列表轉換為字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM