我想以更紧凑的方式(一行或两行)获得以下代码
a:1
b:2
c:3
>>> r = {}
>>> for i in open('foo.txt','r').readlines():
... k,v = i.split(':')
... r[k]=v.strip()
答案 0 :(得分:3)
怎么样:
In [43]: with open("foo.txt") as fd:
my_dict=dict(x.strip().split(":") for x in fd)
....:
In [44]: my_dict
Out[44]: {'a': '1', 'b': '2', 'c': '3'}
另一种方法:
In [46]: with open("foo.txt") as fd:
my_dict={k:v for k,v in (x.strip().split(':') for x in fd)}
....:
In [47]: my_dict
Out[47]: {'a': '1', 'b': '2', 'c': '3'}
答案 1 :(得分:1)
好吧,如果你只关心行数
[r[i.split(':')[0]]=i.split(':')[1] for i in open('foo.txt','r').readlines()]
答案 2 :(得分:1)
另一种选择是使用csv
模块:
import csv
with open('input.txt', 'r') as csvfile:
r = {row[0]: row[1] for row in csv.reader(csvfile, delimiter=":")}
答案 3 :(得分:0)
这已经非常紧凑,并且不会因为用较少的行写出来而获得任何收益。
但如果你真的需要,这里就是一行:
r = dict(i.strip().split(':') for i in open('foo.txt','r').readlines())
我不推荐它,你现有的代码就好了。