使用元组键和浮点值将字符串的文本文件(不是精确的dict格式)转换为dict?

时间:2019-07-22 22:21:41

标签: python string list dictionary tuples

我有一个文本文件(“ 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()的格式,但这并不完全有效,因为以这种格式构建列表时,会得到额外的引号,等等。比我正在尝试的方法更好的方法?

1 个答案:

答案 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}