编码初学者,提前感谢!
我有一个文本文件,如:
A
B
1
2
C
D
1
2
3
4
E
F
1
2
3
4
5
6
我想做的是生成一个字典,将空行之前的每个部分都变成一个键值对。例如,我的文本文件字典应该是:
{('A','B'): [[1],[2]], ('C','D'):[[1, 3], [2, 4]], ('E','F'):[[1, 3, 5],[2, 4, 6]]}
现在,我开始我的功能是这样的:
while line != '':
# rest of function to append to dictionary here
但我已经意识到,这只适用于第一行空行。如果我试图继续读取并打印函数后的行,由于while循环的性质,打印的第一行是D而不是C。如何在不导入任何内容的情况下修复此问题?
这里有一种方法可以做到这一点(假设文件结构与您所说的完全一样(:
首先创建一个包含所有行的字符串:
lines = ''.join(list(open("test.txt")))
#'AnBn1n2nnCnDn1n2n3n4nnEnFn1n2n3n4n5n6'
然后分成两对:
pairs = lines.split('nn')
#['AnBn1n2', 'CnDn1n2n3n4', 'EnFn1n2n3n4n5n6']
最后,在每对中拆分密钥和值:
pairs = lines.split('nn')
result = {}
for pair in pairs:
data = pair.split('n')
key = (data[0], data[1])
first_value = data[2::2]
second_value = data[3::2]
result[key] = [first_value, second_value]
result
输出:
{('A', 'B'): [['1'], ['2']],
('C', 'D'): [['1', '3'], ['2', '4']],
('E', 'F'): [['1', '3', '5'], ['2', '4', '6']]}
注:data[2::2]
表示数组切片从2
位置开始,每2个元素迭代一次
执行以下操作:
txt = x.read_text() # read file as string here
txt = txt.split('nn')
txt = list(map(lambda y: y.split('n'), txt))
keys = list(map(lambda y: y[:2], txt))
values = list(map(lambda y: y[2:], txt))
d = {tuple(key): [[value[0::2]], [value[1::2]]] for key in keys for value in values}