如何按字典值的一部分对字典进行排序?

我有一个具有以下格式的 .txt 文件:


Name A

2019-02-04 15:29:10

First Line of info

Second line of info

Third line of info


Name B

2019-01-04 12:21:10

First Line of info

Second line of info

Third line of info

我已使用以下代码将此文件转换为字典,第一行是键,其余值作为列表:


import itertools as it

dict = {}


with open('filenamehere') as f:

    while True:

        try:

            p = next(f).rstrip()

            dict[p] = list(l.rstrip() for l in it.takewhile(lambda line: line != '\n', f))

            

        except StopIteration:

            break

这将创建一个字典,{'Name A': ['2019-02-04 15:29:10','First line of info','Second line of info','third line of info']等等。然后,我能够按字母顺序对这本词典进行排序,并以与原始文本文件类似的格式显示它:


sorted_dict= {}


sorted_keys = sorted(dict.keys(), key=lambda x:x.lower())


for key in sorted_keys:

        sorted_dict.update({key: dict[key]})

        

for name, details in list(sorted_dict.items()):

    print(f"{name}\n" + '\n'.join(details), "\n")

现在我的问题是如何按最新时间戳对该字典进行排序,然后以与原始文本文件类似的格式打印它?


烙印99
浏览 119回答 2
2回答

函数式编程

sorted_dict = {}for key, value in sorted(original_dict.items(), key=lambda x:x[1][0], reverse=True):        sorted_dict[key] = value其中x[1][0]代表字典值的第一项,我相信这是您想要对字典进行排序的内容。反向参数是可选的,如果未提供,则默认为 False。

三国纷争

基于Python:对列表字典进行排序,您首先需要将时间戳从字符串转换为时间对象,然后比较它们。datetime.datetime.strptime()可以做的工作:将字符串按特定格式转换为Time 对象。例如:In [13]: a = datetime.datetime.strptime('2019-02-04 15:29:10', '%Y-%m-%d %H:%M:%S')In [14]: b = datetime.datetime.strptime('2019-02-04 15:30:10', '%Y-%m-%d %H:%M:%S')In [15]: b > aOut[15]: True  然后你可以用它作为你的键对你的字典进行排序,从我提到的答案中找到解决方案。只需作为函数执行dict()即可将结果转换为字典:In [17]: dict(sorted(sorted_dict.items(), key=lambda x: datetime.datetime.strptime(x[1][0], '%Y-%m-%d %H:%M:%S')))Out[17]:{'Name B': ['2019-01-04 12:21:10',、'First Line of info','Second line of info','Third line of info'],'Name A': ['2019-02-04 15:29:10','First Line of info','Second line of info','Third line of info']} In [18]:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python