簡體   English   中英

python:將文本文件轉換為字典

[英]python : converting text file to dictionary

我有一個名為xrb.txt的文本文件,其前幾行看起來像這樣-

1   N.A.    9.10    9.66 
2   N.A.    8.20    8.48 
3   N.A.    8.70    8.11  
4   6.34    4.60    4.39 
5   6.07    <5.74   4.35 
6   N.A.    5.10    4.42 
7   2.92    3.20    2.05 
8   <1.25   1.44    0.72 

我需要制作一個字典,其中第一列(即1、2、3…)作為鍵,而其他各行中的其他鍵作為每個鍵的值。

有沒有一種簡單的方法可以在python中做到呢?

我正在嘗試以下操作,但是它無法正常工作,並且我肯定會使它過於復雜:

xrbdic = {}

f = open("xrb.txt")
for line in f:
    line = line.strip()
    pa = [p.strip() for p in line.split()]
    xrbdic[parts[0]] = (pa[1], pa[2], pa[3])

您的代碼不起作用的唯一原因是一個愚蠢的錯字:

xrbdic[parts[0]] = (pa[1], pa[2], pa[3])

這將在parts上引發NameError ,因為沒有這樣的變量。 將其更改為pa ,就可以得到您想要的字典。


同時,您不會使事情復雜化。 但是,您可以簡化一下嗎? 當然。

首先, line.split()已經剝離了分割部分之間的所有空白,因此您無需單獨剝離它們。

而且其中包括尾隨的換行符,因此您也不需要整個行的帶。

其次,您可以使用切片而不是顯式列出所有部分。

在執行此操作時,您永遠不會close文件,這對於除了會立即退出的快速和骯臟的腳本之外的任何事情都是一個壞主意。 您可以使用with語句來簡化此過程。

所以:

xrbdic = {}
with open("xrb.txt") as f:
    for line in f:
        pa = line.split()
        xrbdic[pa[0]] = pa[1:]

然后,很容易將整個過程變成字典理解:

with open('xrb.txt') as f:
    xrbdic = {pa[0]: pa[1:] for pa in map(str.split, f)}

您需要將代碼的最后一行更改為以下內容。

xrbdic[pa[0]] = (pa[1], pa[2], pa[3])

您編寫了部分內容,而實際上您應該編寫了pa。

字典理解可能是更慣用的答案。

with open('xrb.txt','r') as f:
    text = f.readlines()

###please ignore
#xrbdic = {p.split()[0]:(p.split()[1],p.split()[2],p.split()[3]) for p in raw_text}
##old ugly one-liner

rows = [line.split() for line in lines]
xrbdic = {row[0]:(row[1],row[2],row[3]) for row in rows}

暫無
暫無

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

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