我有一个文本文件(“ output.txt”),其内容格式如下:
(ABC, DEF): 12.5
(DEF, FEG): 13.5
(RED, FEG): 14.5
我想将其转换为字典,键是一个由两个字符串组成的元组,值是浮点数:
{('ABC','DEF'): 12.5, ('DEF','FEG'): 13.5, ('RED','FEG'): 14.5}
我尝试读取文件,每一行都是一个字符串。然后我尝试使用replace将每一行设置为这种格式:
{('ABC', 'DEF'): '12.5'}
我认为然后我可以将其转换为可以使用ast.literal_eval()的格式,但这并不完全有效,因为以这种格式构建列表时,会得到额外的引号,等等。比我正在尝试的方法更好的方法?
答案 0 :(得分:1)
您可以这样做:
with open('output.txt') as f:
print({tuple(k.strip('()').split(', ')): float(v.strip())
for line in f for k, _, v in [line.partition(':')]})
在dict理解内,我们正在遍历各行,在:
上对它们进行分区以获取键值对,最后将它们转换为所需的键和值形式。
示例:
In [29]: cat output.txt
(ABC, DEF): 12.5
(DEF, FEG): 13.5
(RED, FEG): 14.5
In [30]: with open('output.txt') as f:
...: print({tuple(k.strip('()').split(', ')): float(v.strip()) for line in f for k, _, v in [line.partition(':')]})
...:
{('ABC', 'DEF'): 12.5, ('DEF', 'FEG'): 13.5, ('RED', 'FEG'): 14.5}