【问题标题】:sort first value (latest date time entry) in tuple in dictionary对字典中元组中的第一个值(最新日期时间条目)进行排序
【发布时间】:2020-12-04 04:01:35
【问题描述】:

我正在尝试根据最新的日期时间条目显示字典。我的日期时间在一个元组中,该元组存储在一个键中,它是元组中的第一个值。 *** 这本词典从文本文件中读取内容,所以我的词典 = {}

{'xavier': ('2020-08-13 13:34:01', 'running'), 'alvin': ('2020-08-14 14:34:10', 'basketball')}

任何人都知道如何显示它,以便“alvin”下的键和值首先显示,因为日期时间条目是最新的。像这样:

alvin ('2020-08-14 14:34:10', 'basketball')
xavier ('2020-08-13 14:34:01', 'running')

非常感谢!!

【问题讨论】:

    标签: python sorting dictionary tuples


    【解决方案1】:

    你可以使用

    from datetime import datetime
    
    dct = {'xavier': ('2020-08-13 13:34:01', 'running'), 'alvin': ('2020-08-14 14:34:10', 'basketball')}
    
    
    def sorter(item):
        """ Returns a datetime object """
        return datetime.strptime(item[1][0], '%Y-%m-%d %H:%M:%S')
    
    print(sorted(dct.items(), key=sorter, reverse=True))
    

    【讨论】:

    • 嗨一月!抱歉,我没有添加此内容,但我的字典实际上是从文本文件中读取内容。所以我的 dict = {} 你知道该怎么做吗? :)
    【解决方案2】:

    您可以做的是,处理类似list 的结构,您可以从dict.items() 获得它并在sorted() 函数的帮助下对其进行排序。

    一个例子:

    d = {
        'xavier': ('2020-08-13 13:34:01', 'running'), 
        'alvin': ('2020-08-14 14:34:10', 'basketball'),
        'peter': ('2020-08-19 16:42:00', 'tennis')
    }
    
    sd = sorted(d.items(), key=lambda x: x[1][0], reverse=True)
    
    for item in sd:
        print(item)
    # ('peter', ('2020-08-19 16:42:00', 'tennis'))
    # ('alvin', ('2020-08-14 14:34:10', 'basketball'))
    # ('xavier', ('2020-08-13 13:34:01', 'running'))
    
    

    解释:

    • key 参数用于检索要运行比较的对象,即示例将处理日期字符串
    • 即使您只提供字符串,排序也能正常工作,因为它的格式是正确的,如果您在其他表单上工作,它可能无法正常工作,例如14.08.2020。然后,您可以使用datetime 库。

    【讨论】:

    • 截至Python 3.5 (6?),他们确实有订单。
    • 好的,但是它们不是根据任何基于其内容的标准排序的。它们是根据所做的插入排序的。不管怎么说,还是要谢谢你。很高兴知道。
    • 好吧,如果您使用基于某些标准的理解,那么这就是插入的方式。含义:dct = {key: value for key, value in sorted(dct.items(), key=lambda x: x[1])} 实际上会遵循规则。
    • 感谢您的意见!抱歉,我没有添加此内容,但我的字典实际上是从文本文件中读取内容。所以我的 dict = { } 你知道该怎么做吗? :)
    【解决方案3】:

    你可能会发现这很有用

    import json
    
    file_data = ''
    filepath = 'filepath' #your filepath
    with open(filepath, 'r', encoding='utf-8') as f:
        file_data = f.read()
    my_dictionary = json.loads(file_data) #string file data converted to dictionary in Python
    
    new_sorted_data = sorted(my_dictionary.items(), key=lambda x:x[1][0], reverse=True)
    for i in new_sorted_data:
        print(i[0], i[1])
    
    

    【讨论】:

      【解决方案4】:

      sorted 将是一个选择。

      from datetime import datetime
      
      your_dict = {'xavier': ('2020-08-13 13:34:01', 'running'), 'alvin': ('2020-08-14 14:34:10', 'basketball')}
      for k, v in sorted(your_dict.items(), key=lambda item: datetime.strptime(item[1][0], "%Y-%m-%d %H:%M:%S"), reverse=True):
          print(k, v)
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-26
        相关资源
        最近更新 更多