我有一个文本文件(“output.txt”),其内容格式如下:
(ABC, DEF): 12.5
(DEF, FEG): 13.5
(RED, FEG): 14.5
我想将其转换为字典,键是由两个字符串组成的元组,值是 float :
{('ABC','DEF'): 12.5, ('DEF','FEG'): 13.5, ('RED','FEG'): 14.5}
我尝试读取文件,每一行都是一个字符串。然后我尝试使用替换将每一行转换为以下格式:
{('ABC', 'DEF'): '12.5'}
我想我可以将它转换成一种格式,以便我可以使用 ast.literal_eval(),但这不太有效,因为在将列表构建为这种格式时,您会得到额外的引号等。比我正在尝试的更好的方法?
最佳答案
你可以这样做:
with open('output.txt') as f:
print({tuple(k.strip('()').split(', ')): float(v.strip())
for line in f for k, _, v in [line.partition(':')]})
在字典理解中,我们迭代这些行,在 :
上对它们进行分区以获取键值对,最后将它们转换为键和值所需的形式。
示例:
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}
关于python - 将字符串文本文件(不是精确的字典格式)转换为具有元组键和浮点值的字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57154461/