我遇到了一个丑陋的问题。我收到了以下文本文件,它是从另一个 Python 文件输出的。从之前的文件中,它是吐出到这个文本文件中的字典。
文本文件(名为“output.txt”):
0:[([(11, 191), (11, 170), (14, 170), (11, 188)], [0.7830932724146064, 0.7789413675533634, 0.7714495149543579, 0.7688444764225846])]
90:[([(95, 170), (95, 2), (119, 2), (95, 146)], [0.7830932724146064, 0.7789413675533634, 0.7714495149543579, 0.7688444764225846])]
180:[([(182, 2), (182, 23), (179, 23), (182, 5)], [0.7830932724146064, 0.7789413675533634, 0.7714495149543579, 0.7688444764225846])]
270:[([(98, 23), (98, 191), (74, 191), (98, 47)], [0.7830932724146064, 0.7789413675533634, 0.7714495149543579, 0.7688444764225846])]
我对阅读文本文件相当熟悉,但这个让我感到难过。整个问题的愚蠢之处在于,我实际上需要以字典格式提供给我的文件,所以我基本上只是尝试读取提供给我的文件。 问题是在读入它时,Python 不知道它是一个字典,而是给我字符串。 无论如何,是否可以将字典的值作为列表的列表而不是仅仅一个列表读入字符串(如下所示)?非常感谢!
d = {}
with open("output.txt") as f:
for line in f:
d_line = line.rstrip('\n').split(':')
d[int(d_line[0])] = d_line[1]
print(d)
{0: '[([(11, 191), (11, 170), (14, 170), (11, 188)], [0.7830932724146064, 0.7789413675533634, 0.7714495149543579, 0.7688444764225846])]', 90: '[([(95, 170), (95, 2), (119, 2), (95, 146)], [0.7830932724146064, 0.7789413675533634, 0.7714495149543579, 0.7688444764225846])]', 180: '[([(182, 2), (182, 23), (179, 23), (182, 5)], [0.7830932724146064, 0.7789413675533634, 0.7714495149543579, 0.7688444764225846])]', 270: '[([(98, 23), (98, 191), (74, 191), (98, 47)], [0.7830932724146064, 0.7789413675533634, 0.7714495149543579, 0.7688444764225846])]'}
最佳答案
你很接近,你可以使用 ast.literal_eval
来解释其余部分:
import ast
d = {}
with open("output.txt") as f:
for line in f:
d_line = line.rstrip('\n').split(':')
d[int(d_line[0])] = ast.literal_eval(d_line[1])
print(d)
或者在一行中:
new_d = {int(key):ast.literal_eval(values) for key, values in [i.strip('\n').split(':') for i in open('output.txt')]}
关于Python:从文本文件中读取字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47730752/