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

Python 如何按字典值的一部分对字典进行排序?,python,Python,我有一个.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 =

我有一个.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")
现在我的问题是,如何按最新的时间戳对词典进行排序,然后以与原始文本文件类似的格式打印它?

基于,首先需要将时间戳从字符串转换为时间对象,然后比较它们

可以执行以下操作:按特定格式将字符串转换为时间对象。例如:

在[13]中:a=datetime.datetime.strtime'2019-02-04 15:29:10',“%Y-%m-%d%H:%m:%S” 在[14]中:b=datetime.datetime.strtime'2019-02-04 15:30:10',“%Y-%m-%d%H:%m:%S” In[15]:b>a Out[15]:对 然后,您可以将字典作为键进行排序,根据我提到的答案进行解决。只需执行dict as函数即可将结果转换为dict:

在[17]:dictsortedsorted_dict.items中,key=lambda x:datetime.datetime.strTimex[1][0],“%Y-%m-%d%H:%m:%S” 出[17]: {'Name B':['2019-01-0412:21:10' “第一行信息”, “第二行信息”, “第三行信息”], “姓名A:[“2019-02-04 15:29:10”, “第一行信息”, “第二行信息”, '第三行信息']} 在[18]中:
其中x[1][0]表示字典值的第一项,我认为您希望根据它对字典进行排序。反向参数是可选的,如果未提供,则默认为False。

您是如何生成已排序的\u键的?执行相同的操作,但按时间戳而不是键值排序排序排序函数有一个键值参数!。这是否回答了您的问题?@mkrieger1这个问题是关于获取排序列表的。OP想要一个排序字典,现在可以了,但当另一个问题被问到时还没有。@Konrad Rudolph不确定如何按时间戳而不是键值排序。你传递一个与我链接到obtai的问题的答案中所示类似的键函数n排序的键,然后像以前一样使用代码的其余部分。实际上,基于字符串格式或时间格式排序时间戳似乎没有什么区别…因为在字符串比较中,15:29:10看起来也比12:21:10大…\u那么我为什么回答这个问题?@KonradRudolph啊,是的,我忘了。Edited我的答案,谢谢你提及。如果我通过添加reverse=True按最新时间戳排序,会不会有任何问题?我不确定是否会发生任何潜在问题,因为这是一个时间戳我错过了你要求的“latest”部分。是的,当然你可以使用reverse参数。我也更新了我的答案
sorted_dict = {}
for key, value in sorted(original_dict.items(), key=lambda x:x[1][0], reverse=True):
        sorted_dict[key] = value