2016-11-29 24 views
-2

所以我有一個csv文件的任意數量的列和行(完全矩形,所以沒有丟失的單元格),我想把它轉換成一個字典。做一個csv文件的字典沒有進口

key1 key2 key3 
1  2  3 
4  5  6 
7  8  9 

我想有我在做什麼,現在正在讀的每一行,將遵循這種模式

{key1:[1,4,7], key2:[2,5,8], key3:[3,6,9]} 

字典來。如果我正在閱讀第一行,則每個元素都將成爲字典中的一個鍵並映射到一個空列表。然後我繼續閱讀每一行,但這裏是我遇到問題的地方。我不知道如何將每一行的元素分配給它的正確關鍵字(因爲字典是隨機的),假設我知道如何生成一個我可以正確分配的值的列表(例如,如何我可以讓1去鑰匙1,2去鑰匙2和3去鑰匙3)。

我想這樣做沒有進口。讓我知道你們的想法。

+3

[這是九月再次...](http://meta.softwareengineering.stackexchange.com/questions/6166/open-letter-to-students-with-homework-problems) – Selcuk

+0

這是一個小作爲作業的一部分,我一直在思考這個問題一個多小時:/這是字典的隨機性讓我感到困惑。我確實說過我在做什麼以及我卡在哪裏,即使是一個指針也會讓我回到正軌:/ – Krio

+2

爲什麼不發佈一小時後編寫的(可能是非工作的)代碼呢? ?然後我們可以嘗試糾正你的錯誤。你不會以這種方式得到任何答案,因爲堆棧溢出不是*代碼寫入服務。 – Selcuk

回答

0
>>> s = '''key1 key2 key3 
1  2  3 
4  5  6 
7  8  9 
'''.splitlines() 

>>> fields = s[0].split() 
>>> rows = [[int(x) for x in line.split()] for line in s[1:]] 
>>> print(dict(zip(fields, zip(*rows)))) 
{'key1': (1, 4, 7), 'key2': (2, 5, 8), 'key3': (3, 6, 9)} 
  • s[0]是標題的第一行。
  • .split()斷字到字段名
  • s[1:]得到標題行
  • line.split()後的行拆分行插入字段值
  • int(x)轉換的字符串項「1」成數
  • zip(*rows)調換的行列表
  • zip(fields, transposed_rows)使得鍵/ val的列表UE對
  • dict(list_of_pairs)使得字典

見參考文獻:

+0

我發現了一種不同的方式,但是出於好奇,拉鍊一般會做什麼? – Krio

+0

謝謝你的堅定迴應, – Krio