【问题标题】:sorting dates in key of tuples in dictionary在字典中的元组键中对日期进行排序
【发布时间】:2013-10-08 18:31:39
【问题描述】:

我有一本字典,其中的条目格式为

a = dict({(2,2013):[], (2,2011):[], (7,2013):[] , (4,2013):[]})

我希望我的输出是这样的:

{(2,2011):[], (2,2013):[], (4,2013):[] , (7,2013):[]}

按照它应该是(月,年)的方式,我怎样才能做到这一点?

【问题讨论】:

  • 字典不是在 Python 中排序的。如果订购它们对您来说很重要,您可以使用collections.OrderedDict。如果您只是想以更易于阅读的方式打印出来,您可以使用sorted(a.items())
  • 您能解释一下为什么要订购它吗?你只是想让它像那样显示吗?或者您是否需要订购它们以进行其他计算?
  • @DavidRobinson Grr 编辑了 cmets。 ;)
  • @Michael0x2a 我这个值是我的(月,年),所以我需要确保它们都被订购了

标签: python sorting python-2.7 dictionary calendar


【解决方案1】:
import operator
myDict = {1: 1, 2: 2, 4:4, 2:1}
sorted_myDict = sorted(myDict.iteritems(), key=operator.itemgetter(1))

sorted_myDict 将是按每个元组中的第二个元素排序的元组列表。

@Decency 的回答也是很好的选择。

【讨论】:

  • 但它只会订购我的第二个元素(年)第一个元素(月)呢?我需要一些能同时兼顾的东西
  • iteritems() 返回键值元组的迭代器,因此operator.itemgetter(1)) 从迭代器的每个元素中访问第一项(即键,它本身就是月-年元组)。
  • 在我得到元组后,我再次执行 dict(sorted_mydict),当我这样做时,这就是我之前得到的:(4, 2013) (2, 2013) (7, 2013) ( 6, 2013) (3, 2013) (11, 2012) (9, 2012) (5, 2013) (9, 2013) (8, 2013) (8, 2012) (1, 2013) (10, 2013) ( 12, 2012) (10, 2012) 及之后: (4, 2013) (2, 2013) (12, 2012) (6, 2013) (8, 2012) (11, 2012) (9, 2012) (10, 2012) (9, 2013) (8, 2013) (3, 2013) (1, 2013) (10, 2013) (7, 2013) (5, 2013)
  • @psychok7 同样,字典在 Python 中是无序的。如果您将数据放回字典中,则不会对其进行排序。此示例中的 sorted_myDict 是一个列表,而不是一个字典。您可以如上所述将数据排序到列表中,然后将数据(从该列表中)以正确的顺序添加到 OrderedDict。
【解决方案2】:

如果出于某种原因需要保留顺序,可以使用 OrderedDict 对象。

有序字典就像普通字典一样,但它们会记住插入项目的顺序。遍历有序字典时,项按其键首次添加的顺序返回。

文档:http://docs.python.org/2/library/collections.html#collections.OrderedDict

class collections.OrderedDict([items])

【讨论】:

  • 这可能对我不起作用,因为插入时的顺序也不正确。
【解决方案3】:

经过大量尝试后,我改变了方法,而不是元组,我使用日期时间对象,然后应用:

months_sorted = sorted(months.iteritems(), key=operator.itemgetter(0))

【讨论】:

    猜你喜欢
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 2011-11-13
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多