将字典的字典导出到 CSV 文件中会将内部值转换为不需要的字符串
Exporting a dictionary of dictionary into a CSV file converts inner values in unwanted strings
我有一个字典作为值,另一个字典包含 10 个键,其各自的值作为列表。
以下是键值 655 的示例:
655: {
{
0: [],
1: [],
2: [],
3: [],
4: [],
5: [],
6: [],
7: [],
8: [
[299, 0.4444444444444444, 0],
[627, 0.4444444444444444, 0],
[300, 0.2222222222222222, 0],
[628, 0.2222222222222222, 0],
[301, 0.1111111111111111, 0],
[629, 0.1111111111111111, 0],
[302, 0.2222222222222222, 0],
[630, 0.2222222222222222, 0]
],
9: []
}
}
我的问题是,当我将字典导出到 csv 文件并从另一个脚本导入时,我得到以下结果:
'655': [
'{0: [], 1: [], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [], 8: [[299, 0.4444444444444444, 0], [627, 0.4444444444444444, 0], [300, 0.2222222222222222, 0], [628, 0.2222222222222222, 0], [301, 0.1111111111111111, 0], [629, 0.1111111111111111, 0], [302, 0.2222222222222222, 0], [630, 0.2222222222222222, 0]], 9: []}'
]
}
我已经解决了将其转换回 int 的关键问题,但我不知道如何将值恢复为字典,而不是将其作为字符串获取。
根据@enke 的建议,以下提供了解决我的问题的方法。
首先我将数据导入为:
data = {}
with open('probabilities.csv', mode='r') as input:
reader = csv.reader(input)
data = {rows[0]:rows[1] for rows in reader}
input.close()
然后我将主字典中的键及其值重新转换回包含十个键及其值的字典。
probabilities = {}
for k, v in data.items():
probabilities[int(k)] = ast.literal_eval(v)
正在获取具有所需结果的新词典:
655: {
{
0: [],
1: [],
2: [],
3: [],
4: [],
5: [],
6: [],
7: [],
8: [
[299, 0.4444444444444444, 0],
[627, 0.4444444444444444, 0],
[300, 0.2222222222222222, 0],
[628, 0.2222222222222222, 0],
[301, 0.1111111111111111, 0],
[629, 0.1111111111111111, 0],
[302, 0.2222222222222222, 0],
[630, 0.2222222222222222, 0]
],
9: []
}
}
我有一个字典作为值,另一个字典包含 10 个键,其各自的值作为列表。
以下是键值 655 的示例:
655: {
{
0: [],
1: [],
2: [],
3: [],
4: [],
5: [],
6: [],
7: [],
8: [
[299, 0.4444444444444444, 0],
[627, 0.4444444444444444, 0],
[300, 0.2222222222222222, 0],
[628, 0.2222222222222222, 0],
[301, 0.1111111111111111, 0],
[629, 0.1111111111111111, 0],
[302, 0.2222222222222222, 0],
[630, 0.2222222222222222, 0]
],
9: []
}
}
我的问题是,当我将字典导出到 csv 文件并从另一个脚本导入时,我得到以下结果:
'655': [
'{0: [], 1: [], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [], 8: [[299, 0.4444444444444444, 0], [627, 0.4444444444444444, 0], [300, 0.2222222222222222, 0], [628, 0.2222222222222222, 0], [301, 0.1111111111111111, 0], [629, 0.1111111111111111, 0], [302, 0.2222222222222222, 0], [630, 0.2222222222222222, 0]], 9: []}'
]
}
我已经解决了将其转换回 int 的关键问题,但我不知道如何将值恢复为字典,而不是将其作为字符串获取。
根据@enke 的建议,以下提供了解决我的问题的方法。
首先我将数据导入为:
data = {}
with open('probabilities.csv', mode='r') as input:
reader = csv.reader(input)
data = {rows[0]:rows[1] for rows in reader}
input.close()
然后我将主字典中的键及其值重新转换回包含十个键及其值的字典。
probabilities = {}
for k, v in data.items():
probabilities[int(k)] = ast.literal_eval(v)
正在获取具有所需结果的新词典:
655: {
{
0: [],
1: [],
2: [],
3: [],
4: [],
5: [],
6: [],
7: [],
8: [
[299, 0.4444444444444444, 0],
[627, 0.4444444444444444, 0],
[300, 0.2222222222222222, 0],
[628, 0.2222222222222222, 0],
[301, 0.1111111111111111, 0],
[629, 0.1111111111111111, 0],
[302, 0.2222222222222222, 0],
[630, 0.2222222222222222, 0]
],
9: []
}
}