将文本文件转换为字典

时间:2017-03-28 01:06:54

标签: python python-3.x dictionary

我有一个名为dict1.txt的文本文件,其中包含两行,我想让第一个字符串给出键,第二个字符串给出值。文本文件是

  

abcdefghijklmnopqrstuvwxyz

     

gikaclmnqrpoxzybdefhjstuvw

和我一直在玩的代码是:

def read_cipherdef(fn):
d = {}
fn = open('dict1.txt', 'r')
for line in fn:
    key, val = line.split()
    d[(key)] = val

但是在这种情况下,line.split()实际上并没有按字符分割第一行,而且它还提供了一个ValueError:解压缩的值太多(预期为2)。

另外我知道list(map(''.join, zip(*[iter('dict1.txt')]*1)))会将它们分开,但是将它与现有代码结合使用会给我带来另一个ValueError。所以我的问题是:我如何一起使用所有这些信息来实现我想要的字典?

感谢。

4 个答案:

答案 0 :(得分:4)

这是您实现这一目标的一种方式。基本上,读取两行,压缩它们并在字典理解中使用它们。

>>> with open("/tmp/t") as f:
...     line1 = f.readline().strip()
...     line2 = f.readline().strip()
...     print({x:y for x, y in zip(line1, line2)})
... 
{'a': 'g', 'b': 'i', 'c': 'k', 'd': 'a', 'e': 'c', 'f': 'l', 'g': 'm', 'h': 'n', 'i': 'q', 'j': 'r', 'k': 'p', 'l': 'o', 'm': 'x', 'n': 'z', 'o': 'y', 'p': 'b', 'q': 'd', 'r': 'e', 's': 'f', 't': 'h', 'u': 'j', 'v': 's', 'w': 't', 'x': 'u', 'y': 'v', 'z': 'w'}

..或者如果你想要一个单行(假设文件中只有2行):

>>> with open("/tmp/t") as f:
...     print({x: y for x, y in zip(*[list(x.strip()) for x in f])})
... 
{'a': 'g', 'b': 'i', 'c': 'k', 'd': 'a', 'e': 'c', 'f': 'l', 'g': 'm', 'h': 'n', 'i': 'q', 'j': 'r', 'k': 'p', 'l': 'o', 'm': 'x', 'n': 'z', 'o': 'y', 'p': 'b', 'q': 'd', 'r': 'e', 's': 'f', 't': 'h', 'u': 'j', 'v': 's', 'w': 't', 'x': 'u', 'y': 'v', 'z': 'w'}

答案 1 :(得分:2)

这个怎么样?

with open('dict1.txt') as f:
    lines=[line.strip('\n') for line in f.readlines()]
    d=dict(zip(lines[0],lines[1]))

from pprint import pprint
pprint(d)

结果:

{'a': 'g',
 'b': 'i',
 'c': 'k',
 'd': 'a',
 'e': 'c',
 'f': 'l',
 'g': 'm',
 'h': 'n',
 'i': 'q',
 'j': 'r',
 'k': 'p',
 'l': 'o',
 'm': 'x',
 'n': 'z',
 'o': 'y',
 'p': 'b',
 'q': 'd',
 'r': 'e',
 's': 'f',
 't': 'h',
 'u': 'j',
 'v': 's',
 'w': 't',
 'x': 'u',
 'y': 'v',
 'z': 'w'}

答案 2 :(得分:1)

你也可以这样做:

data = (k.rstrip() for k in open("dict1.txt", 'r'))
a = {k:v for k,v in zip(*data)}
print(a)

或者可能在一行中:

a = {k:v for k,v in zip(*(k.rstrip() for k in open("dict1.txt", 'r')))}
print(a)

输出:

{'a': 'g', 'y': 'v', 'k': 'p', 'j': 'r', 'f': 'l', 'g': 'm', 'o': 'y', 'r': 'e', 's': 'f', 'b': 'i', 'e': 'c', 'u': 'j', 't': 'h', 'z': 'w', 'l': 'o', 'c': 'k', 'h': 'n', 'i': 'q', 'n': 'z', 'd': 'a', 'w': 't', 'x': 'u', 'v': 's', 'm': 'x', 'p': 'b', 'q': 'd'}

答案 3 :(得分:1)

而不是理解,你可以直接使用dict:

dict(zip(*open('dict1.txt', 'rt').read().strip().split()))

输出:

{'a': 'g', 'b': 'i', 'c': 'k', 'd': 'a', 'e': 'c', 'f': 'l', 'g': 'm', 'h': 'n', 'i': 'q', 'j': 'r', 'k': 'p', 'l': 'o', 'm': 'x', 'n': 'z', 'o': 'y', 'p': 'b', 'q': 'd', 'r': 'e', 's': 'f', 't': 'h', 'u': 'j', 'v': 's', 'w': 't', 'x': 'u', 'y': 'v', 'z': 'w'}