Python 从文件读入字典,以及奇怪的eval()行为

Python 从文件读入字典,以及奇怪的eval()行为,python,file,dictionary,file-io,eval,Python,File,Dictionary,File Io,Eval,使用eval()或ast.literal\u eval()从文件中创建词典(正如其他人建议的那样)会产生奇怪的结果,我不知道为什么 我的文件,file.txt包含以下内容: {0 : {1: 6, 1:8}, 1 : {1:11}, 2 : {3: 9}, 3 : {},4 : {5:3},5 : {2: 7, 3:4}} 我把它读入字典,然后把内容照样打印出来 graph1 = {} graph1 = ast.literal_eval(open("file.txt").read()) 我得

使用
eval()
ast.literal\u eval()
从文件中创建词典(正如其他人建议的那样)会产生奇怪的结果,我不知道为什么

我的文件,
file.txt
包含以下内容:

{0 : {1: 6, 1:8}, 1 : {1:11}, 2 : {3: 9}, 3 : {},4 : {5:3},5 : {2: 7, 3:4}}
我把它读入字典,然后把内容照样打印出来

graph1 = {}
graph1 = ast.literal_eval(open("file.txt").read())
我得到了这个东西,
{1:6}
丢失了

{0: {1: 8}, 1: {1: 11}, 2: {3: 9}, 3: {}, 4: {5: 3}, 5: {2: 7, 3: 4}}
我将“file.txt”的内容更改为:

{0: {2: 7, 3: 4}, 1: {1: 11}, 2: {3: 9}, 3: {}, 4: {5: 3}, 5: {2: 7, 3: 4}}
然后显示正确的内容

然后我将
file.txt
的内容更改为这个,其中我将
1:6
重写为
2:6

{0 : {2: 6, 1:8}, 1 : {1:11}, 2 : {3: 9}, 3 : {},4 : {5:3},5 : {2: 7, 3:4}}
这是输出,
{2:6}
{1:8}
切换的位置

{0: {1: 8, 2: 6}, 1: {1: 11}, 2: {3: 9}, 3: {}, 4: {5: 3}, 5: {2: 7, 3: 4}}

我所要做的就是把一个文件的内容正确地读入我的字典。出了什么问题?

缺少
1:6
的原因是您的字典中也有
1:8
,而且由于python使用哈希表来实现字典,所以它们不会保留重复的键(因为它们具有相同的哈希值)更改顺序的原因是因为它们的实现方式。

不能有重复的
键。如果向
dict
对象提供了相同的键,则前一个值将被后一个值覆盖

例如:

>>> d = {'a': 'x', 'b': 'y', 'c': 'z', 'a': 'w'}
>>> d
{'a': 'w', 'c': 'z', 'b': 'y'}  # ('a': 'x') is overridden by ('a': 'w')