簡體   English   中英

給定一個文本文件,如何在Python中將其制成字典?

[英]Given a text file, how do I make it into a dictionary in Python?

從文本文件在Python中創建字典。

文本文件如下所示:

Name,birthday,deathdate
Alan,Jan6,Dec12
Jovi,Oct6,Feb6
Kyle,June4,May9

第一行包含所有鍵,接下來的幾行是按順序映射到這些鍵的值。 那么我將如何創建這樣的字典? 謝謝。

假設您正在讀取名為in.txt的csv文件。 首先,您從文件中讀取所有行並將它們存儲在列表中。 然后,您應該創建一個空字典。 然后,我們為第一行中的每個項目分配一個空列表。 然后,我們迭代所有其他行並將它們附加到各自的列表中。

L = []
with open('in.txt','r') as f:
    for line in f:
        l = line.strip().split(',')
        L.append(l)
M = {}
for key in L[0]:
    M[key] = []
for i in range(1,len(L)):
    for j in range(len(L[i])):
        M[ L[0][j] ].append(L[i][j])
print M

輸出:

{'deathdate': ['Dec12', 'Feb6', 'May9'], 'birthday': ['Jan6', 'Oct6', 'June4'], 'Name': ['
Alan', 'Jovi', 'Kyle']}

如果您確實想要該輸出,請嘗試:

import csv

with open("yourfile.txt") as f:
    reader = csv.reader(f)
    headers = next(reader)
    lines = list(reader)

result = dict(zip(headers, zip(*lines)))
# {'birthday': ('Jan6', 'Oct6', 'June4'),
#  'name': ('Alan', 'Jovi', 'Kyle'),
#  'deathdate': ('Dec12', 'Feb6', 'May9')}

zip(*some_list)是將行轉換為列的有用習慣。 在這里,我們使用它來將標題名稱與其列配對。

請注意,這會在結果字典中創建元組,而不是列表。 如果您需要列表,則必須在字典理解中強迫自己

result = {header: list(values) for header,values in zip(headers, zip(*lines))}
# {'birthday': ['Jan6', 'Oct6', 'June4'],
#  'name': ['Alan', 'Jovi', 'Kyle'],
#  'deathdate': ['Dec12', 'Feb6', 'May9']}

如果您願意安裝pandas可以在一行中完成:

import pandas as pd
pd.read_csv('yourfile.txt').to_dict("list")

輸出:

{'Name': ['Alan', 'Jovi', 'Kyle'],
 'birthday': ['Jan6', 'Oct6', 'June4'],
 'deathdate': ['Dec12', 'Feb6', 'May9']}

假設數據在文本文件“ data.txt”中:

>>> import pandas as pd
>>> my_dict = pd.read_csv('data.txt').to_dict('list')
>>> my_dict
{'Name': ['Alan', 'Jovi', 'Kyle'],
 'deathdate': ['Dec12', 'Feb6', 'May9'],
 'birthday': ['Jan6', 'Oct6', 'June4']}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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