d = {}
f = open("tennis.txt")
for i, l in enumerate(f):
# cut the '0b' chars, so you will get your dict keys just like you want
bin_num = bin(i)[2:]
# if the key is shorter than 3 chars, add 0 to the beginning
while len(bin_num) < 3:
bin_num = '0' + bin_num
d[bin_num] = l[:-1]
f.close()
for i in sorted(d.items()):
print i
with open('/tmp/names.txt') as f:
print({bin(k)[2:].zfill(3): v.strip() for k,v in enumerate(f)})
印刷品:
^{pr2}$
如果您不知道文件中有多少行是为了给zfill使用正确的数字,您可以先对它们进行计数:
with open(fn) as f:
i=max(ln for ln,line in enumerate(f) if line.strip())
print(i, bin(i)[2:])
fill=len(bin(i)[2:])
f.seek(0)
print({bin(k)[2:].zfill(fill): v.strip() for k,v in enumerate(f) if v.strip()})
根据andybuckley's答案,您可以这样做:
编辑:感谢@pepr-记住关闭打开的文件。
^{pr2}$输出:
很难知道你想要什么:我把这个问题解释为想从一个文本文件中读取名字,然后用一个递增的二进制键将每个名字插入到dict中。下面是一个交互式Python3会话,它执行此操作并显示填充的字典:
请注意,我使用了“d”而不是“dict”作为dictionary变量的名称,因为我不希望变量名隐藏类名:避免对变量和类使用相同的名称总是一个好主意,尽管Python不会反对。在
使用dict comprehension、zfill和enumerate:
印刷品:
^{pr2}$如果您不知道文件中有多少行是为了给
zfill
使用正确的数字,您可以先对它们进行计数:相关问题 更多 >
编程相关推荐