【问题标题】:Sorting nested python dictionary对嵌套的python字典进行排序
【发布时间】:2011-03-15 04:14:16
【问题描述】:

我有一个 python 字典,格式如下。

{'KEY': (NUMBER, [DATE1, DATE2]}

例如,{'a': (10, ['2010/04/11','2009/03/11'])}

如何按 DATE1(列表中的第一个元素)对字典进行排序?

编辑

如果日期相同,我可以重新排序吗?例如。

{'a': (10, ['2010/04/11','2009/03/11'])}
{'b': (20, ['2010/04/11','2009/03/10'])}
{'c': (100, ['2009/01/01'])}

-->

{'b': (20, ['2010/04/11','2009/03/10'])} // this comes first as 20 > 10
{'a': (10, ['2010/04/11','2009/03/11'])}
{'c': (100, ['2009/01/01'])}

【问题讨论】:

  • 排序这本词典是什么意思?你有很多这种格式的字典吗?

标签: python sorting dictionary


【解决方案1】:

字典无法排序。如果你想要一个 2 元组的排序列表:

sorted(D.iteritems(), key=lambda x: x[1][1][0])

如果您希望按日期顺序而不是字符串顺序将表达式传递给datetime.strptime()(并不是说鉴于现有日期格式存在巨大差异...)。

【讨论】:

  • 值得一提的是,字典不可排序的原因是它们没有维护任何元素排序的概念。
  • 我又添加了一个问题。当日期相同时,我可以在排序列表中排序吗?谢谢。
  • 当然。只需返回一个元组作为键。 key=lambda x: (x[1][1][0], -x[1][0])
【解决方案2】:

如果您使用的是 Python 2.7 或更高版本,则可以使用新的 collections.OrderedDict 类。连同 Ignacio 的用于进行实际排序的代码,这应该可以为您提供所需的内容。

假设 a 是你当前的字典,那么

OrderedDict(sorted(a.items(), key=lambda x: (x[1][1][0], -x[1][0])))

将返回排序后的版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-31
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多