Python:从文本文件到带键字典

2024-09-28 20:54:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有八个名字的文本文件,按名字排序,像这样:

Anna
David
Dennis
Morgan
Lana
Peter
Joanna
Karen

现在我想把它们放到字典里,给每个名字加上不同的键。 名字在新行上。我想给dict中的名字加上不同的二进制数。 我该怎么做?在

我试过这样的东西:

^{pr2}$

Tags: 字典排序二进制名字dictpeterdavid文本文件
3条回答

根据andybuckley's答案,您可以这样做:

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

编辑:感谢@pepr-记住关闭打开的文件。

输出:

^{pr2}$

很难知道你想要什么:我把这个问题解释为想从一个文本文件中读取名字,然后用一个递增的二进制键将每个名字插入到dict中。下面是一个交互式Python3会话,它执行此操作并显示填充的字典:

>>> d = {}
>>> for i, l in enumerate(open("tennis.txt")):
...     d[bin(i)] = l[:-1]
>>> d
{'0b10': 'Dennis', '0b11': 'Morgan', '0b110': 'Joanna', '0b0': 'Anna', '0b1': 'David', '0b101': 'Peter', '0b100': 'Lana', '0b111': 'Karen'}

请注意,我使用了“d”而不是“dict”作为dictionary变量的名称,因为我不希望变量名隐藏类名:避免对变量和类使用相同的名称总是一个好主意,尽管Python不会反对。在

使用dict comprehension、zfill和enumerate:

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()})

相关问题 更多 >