【问题标题】:I want to sort a dictionary with key being month-year我想对字典进行排序,键为月-年
【发布时间】:2018-08-08 11:51:46
【问题描述】:

我想对字典进行排序,键为月-年。

例如:对于

March 2017,January 2018,May 2017

我的字典键应该按这个顺序排序:

March 2017,May 2017,January 2018

怎么办?

例如:

{'February 2017': {'a': 1.0, 'b': 683.01}, 
 'March 2018': {'a': 0.0, 'b': 623.79}, 
 'March 2017': {'a': 1.0, 'b': 683.01}}

注意:月份年份的值动态

【问题讨论】:

  • 使用python3.7,或者使用collections.OrderedDict
  • @ukemi :在那个问题中,所有键值都可以轻松排序。在我的问题中,这些值是动态的,我必须对其进行排序。例如:一个值将在 2017 年 3 月,另一个将在 2018 年 3 月。如何对这些进行排序?
  • @RafaelC :它有效.. 谢谢队友..
  • 请注意,python dict中不能用同一个键存储不同的值。

标签: python python-2.7


【解决方案1】:

您需要将键转换为日期,以便它们正确排序。假设你的字典叫做example_dict

import datetime
keys = list(example_dict.keys())
keys.sort(key=lambda x: datetime.datetime.strptime(x,'%B %Y'))

【讨论】:

    【解决方案2】:

    您需要使用特殊的按键功能进行排序:

    months = ['January',
              'February',
              'March',
              'April',
              'May',
              'June',
              'July',
              'August',
              'September',
              'October',
              'November',
              'December']
    
    month_num = dict(zip(months, range(12)))
    
    
    def compare(date):
        month, year = date.split(' ')
        return (year, month_num[month])
    
    
    dates = {
        'February 2017': {'a': 1.0, 'b': 683.01},
        'March 2018': {'a': 0.0, 'b': 623.79}}
    
    dict(sorted(dates.items(), key=lambda x: compare(x[0])))
    

    【讨论】:

      【解决方案3】:

      仅供参考:在 中,由于字典是“无序的”,可以这么说,您在原始帖子中的字典在语法上是不正确的,因为有两个键具有相同的值。解释器将覆盖其中之一。

      根据您的原始帖子,我推测其中一个应该是 2018 年 5 月,所以这是我用于回答的字典:

      {'February 2017': {'a': 1.0, 'b': 683.01}, 
       'May 2018': {'a': 0.0, 'b': 623.79}, 
       'March 2018': {'a': 1.0, 'b': 683.01}}
      

      由于如上所述,字典没有明显的排序(哈希值),所以我们必须转换为列表,然后再玩。单线解决方案如下:

      sorted(list(data.items()), key=lambda x: [x[0].split()[-1], x[0].split()[0], x[1]])
      

      你得到如下输出:

      >>> sorted(list(data.items()), key=lambda x: [x[0].split()[-1], x[0].split()[0], x[1]])
      [('February 2017', {'a': 1.0, 'b': 683.01}), ('March 2018', {'a': 1.0, 'b': 683.01}), ('May 2018', {'a': 0.0, 'b': 623.79})]
      >>> 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-27
        • 2011-12-11
        • 2021-02-12
        • 2018-12-22
        相关资源
        最近更新 更多