我有一个名为file.txt
的文本文件,其中包含如下数字:
我想构建一个python字典,其中每行的第一个数字是键,第二个数字总是被忽略,最后三个数字作为值。但是在字典中,一个键是不能重复的,所以当我写我的代码时(附在问题的最后),我得到的是
'1' : [ '90' '4.914E-08' '1.563E-07' '5.193E-07' ]
'2' : [ '5' '5.254E-07' '0.166E-02' '9.723E-06' ]
'3' : [ '24' '3.244E-03' '5.239E-04' '9.002E-08' ]
所有其他数字都被删除,只有最后一行保留为值。我需要的是把所有的数字都加到一个键上,比如说1,然后把它附加到字典里。例如,我需要的是:
'1' : ['8.106E-08' '2.052E-08' '3.837E-08' '-4.766E-09' '9.003E-08' '4.812E-07' '4.914E-08' '1.563E-07' '5.193E-07']
有没有可能在python中优雅地完成它?我现在的代码如下:
diction = {}
with open("file.txt") as f:
for line in f:
pa = line.split()
diction[pa[0]] = pa[1:]
with open('file.txt') as f:
diction = {pa[0]: pa[1:] for pa in map(str.split, f)}
4条答案
按热度按时间2sbarzqh1#
可以使用
defaultdict
。dluptydi2#
试试这个:
这是Python 3的解决方案,因为
a, *b = tuple1
语句在Python 2中是无效的。如果你使用的是Python 2,请看@cha0site的解决方案。1bqhqjot3#
将
diction
中每个键的值设为一个列表,并在每次迭代中扩展该列表。使用您现在编写的代码,当您说diction[pa[0]] = pa[1:]
时,您每次出现键时都将diction[pa[0]]
中的值替换为diction[pa[0]]
,这描述了您看到的行为。在这段代码中,
diction
的每个值都是一个列表。在每次迭代中,如果键存在,则该列表将使用来自pa
的新值进行扩展,从而为您提供每个键的所有值的列表。edqdpe6u4#
在一个非常简单的for循环中做到这一点:
或者,如果你想在一行代码中使用defaultdict: