在字典中访问字典的Python返回失真的字典

时间:2018-10-08 14:55:43

标签: python dictionary indexing tuples

我最近一直在研究处理某种计划的python应用程序。我有一个字典,其中包含时间表中轮换使用的天数,然后每一天都包含具有一天中每个不同部分的字典。看起来像这样:

schedule = {
'rotation': 6,
'1' : {'B': '8:32', 'C': '9:34', 'D' : '10:36', 'F':'12:11', 'G': '1:13', 'H':'2:15'},

'2' : {'A': '8:32', 'B': '9:34', 'C,' : '10:36', 'E':'12:11', 'F': '1:13', 'G,':'2:15'},

'3' : {'A': '8:32', 'B': '9:34', 'D,' : '10:36', 'E':'12:11', 'F': '1:13', 'H,':'2:15'},

'4' : {'A': '8:32', 'C': '9:34', 'D,' : '10:36', 'E':'12:11', 'G': '1:13', 'H,':'2:15'},


'5' : {'B' : '8:40', 'D' : '11:00', 'F' : '12:55', 'H' : '2:15' },

'6' : {'A' : '8:40', 'C' : '11:00', 'E' : '12:55', 'G' : '2:15' }

}

这一切看起来都应该正常工作,但是当我打印出来时,我得到了一个扭曲的字典,看起来像是对它进行了排序:

{'1': {'C': '9:34', 'B': '8:32', 'D': '10:36', 'G': '1:13', 'F': '12:11', 'H': '2:15'}, 
'3': {'A': '8:32', 'D,': '10:36', 'B': '9:34', 'E': '12:11', 'F': '1:13', 'H,': '2:15'}, 
'2': {'A': '8:32', 'B': '9:34', 'E': '12:11', 'F': '1:13', 'C,': '10:36', 'G,': '2:15'}, 
'5': {'H': '2:15', 'B': '8:40', 'D': '11:00', 'F': '12:55'}, 
'4': {'A': '8:32', 'C': '9:34', 'E': '12:11', 'G': '1:13', 'D,': '10:36', 'H,': '2:15'}, 
'6': {'A': '8:40', 'C': '11:00', 'E': '12:55', 'G': '2:15'}, 
'rotation': 6}

如您所见,在打印的第一天,它以C而不是B开头,并且“旋转”在字典的末尾而不是前面。为什么我的字典会这样打印?

3 个答案:

答案 0 :(得分:1)

由于哈希函数,字典中的顺序不稳定。最重要的是,Python现在在散列时使用一个盐值,这意味着每次运行的顺序都会有所不同(除非您要求稳定的字典)。

答案 1 :(得分:0)

不需要Python字典来保留顺序。如果要订购,则可以使用列表。如果您只想按排序的顺序查看字典,则可以使用.sort()sorted()来帮助打印。

答案 2 :(得分:0)

您可以对这本字典进行排序,但是您必须为rotation设置例外,因为它的值不适合作为带有字母键的字典的其余格式

d = {k: dict(sorted(v.items(), key=lambda x: x[0])) if k != 'rotation' else schedule[k] for k, v in schedule.items()}
print(d)
# {'rotation': 6, '1': {'B': '8:32', 'C': '9:34', 'D': '10:36', 'F': '12:11', 'G': '1:13', 'H': '2:15'}, '2': {'A': '8:32', 'B': '9:34', 'C,': '10:36', 'E': '12:11', 'F': '1:13', 'G,': '2:15'}, '3': {'A': '8:32', 'B': '9:34', 'D,': '10:36', 'E': '12:11', 'F': '1:13', 'H,': '2:15'}, '4': {'A': '8:32', 'C': '9:34', 'D,': '10:36', 'E': '12:11', 'G': '1:13', 'H,': '2:15'}, '5': {'B': '8:40', 'D': '11:00', 'F': '12:55', 'H': '2:15'}, '6': {'A': '8:40', 'C': '11:00', 'E': '12:55', 'G': '2:15'}}