使用eval()
或ast.literal_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}}
我想要做的就是将文件内容正确读入我的字典。出了什么问题?
答案 0 :(得分:1)
缺少1:6
的原因是因为您的字典中也有1:8
,并且由于python使用哈希表来实现字典,因此它们不会保留重复的键(因为它们具有相同的哈希值)并且更改顺序的原因是dictionaries don't have a specific order,因为它们的实现方式。
答案 1 :(得分:1)
Dictionaries不能有重复key
。如果向dict
对象提供了相同的密钥,则以前的值会覆盖以前的值。
例如:
>>> d = {'a': 'x', 'b': 'y', 'c': 'z', 'a': 'w'}
>>> d
{'a': 'w', 'c': 'z', 'b': 'y'} # ('a': 'x') is overridden by ('a': 'w')