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')