【问题标题】:Python accessing dictionary inside of dictionary returns distorted dictPython 访问字典内的字典返回扭曲的字典
【发布时间】:2023-03-22 14:52:01
【问题描述】:

我最近一直在开发一个处理某种日程安排的 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}

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

【问题讨论】:

标签: python dictionary indexing tuples


【解决方案1】:

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

【讨论】:

  • 好的,谢谢,我如何让字典稳定?
  • 在 Google 上检查 python 有序字典。
【解决方案2】:

Python 字典不需要保持顺序。如果订单是您想要的,那么您可以使用列表。如果您只想按排序顺序查看字典,可以使用.sort() 或sorted() 帮助您打印。

【讨论】:

    【解决方案3】:

    您可以对该字典进行排序,但您必须对 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'}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 2021-09-20
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多