2014-11-04 505 views
-1

我读一个txt文件,该文件的格式为:如何读取一个txt文件并创建一个字典,每个键在Python中的值列表?

in 0.01 -0.07 0.09 -0.02 0.27 
and 0.2 0.3 0.5 0.6 
to 0.87 0.98 0.54 
from 1.2 5.4 0.2 0.4 

我想创建一个字典,每个字是关键,它的值是一个数字的列表,如:

{in : [0.017077, -0.073018, 0.094730, -0.026420, 0.272884], and : [0.2, 0.3, 0.5 ,0.6]....} 

我该怎么做?目前我正在做这样的事情:

with open('file.txt','r') as text: 
    for line in text: 
     key, value = line.split() 
     res[key] = int(value) 
print res 

但它给我的错误:too many values to unpack

+1

你确定要'int'而不是'float'吗? – Matthias 2014-11-04 09:10:56

回答

4

line.split()返回值的列表,Python不能告诉你如何想他们keyvalue之间的分裂,你需要明确这个

尝试:

vals = line.split() 
key = vals[0] 
value = [float(x) for x in vals[1:]] 
res[key] = value 
+0

或者,您可以在Python 2.x中使用'map(float,vals [1:])'。 – 2014-11-04 09:13:58

+1

或Python 3中的list(map(float,vals [1:]))'。但列表理解看起来很好。 – Matthias 2014-11-04 09:14:52

+1

Python 3将允许你做'key,* values = line.split()'。 – Matthias 2014-11-04 09:16:36

0

的问题是

key, value = line.split() 

例如

>>> a = "in 0.01 -0.07 0.09 -0.02 0.27" 
>>> a.split() 
['in', '0.01', '-0.07', '0.09', '-0.02', '0.27'] 
>>> x, y = a.split() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: too many values to unpack 

斯普利特返回大于2层的价值观和你正在试图让那些在2个变量。

您可以尝试

key , value = line.split()[0], line.split[1:] 
0

你让两个错误 - 第一个是两个变量来解压缩大于2倍的值,二是使用int()铸造获得浮动。

最简单的办法是这样的使用Python 2.x的:

res = dict() 
with open('file.txt','r') as text: 
    for line in text: 
     record = line.split() 
     key = record[0] 
     values = [float(value) for value in record[1:]] 
     res[key] = values 
print res 

请记住,在与Python 3.x中,你可以直接做到这一点:

key, *values = line.split() 

更简洁的版本使用字典理解:

with open('file.txt','r') as text: 
    res = {line.split()[0]: [v for v in map(float, line.split()[1:])] for line in text} 
相关问题