python - 将字符串文本文件(不是精确的字典格式)转换为具有元组键和浮点值的字典?

标签 python string list dictionary tuples

我有一个文本文件(“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/

相关文章:

c++ - 从纯文本中读取真值表,将其转换为 C++ 中的 map<int,list<int>>

python - 在Python中返回按元音计数过滤的列表的函数

python - 如何将 mysql 单列列表结果直接提取到 python 列表中?

python - Python 中的 Unicode 和(希腊语)变音符号

android - 如何从字符串中删除字符 '\'?

python - PyMySQL:查询大量行失败

r - 将文本列转换为 r 中的向量

python - 将数字的 unicode 表示形式转换为 ascii 字符串

python - pd.to_datetime 返回一个对象,而不是时间序列

Python 在运行时意外执行命令