Python 如何按字典值的一部分对字典进行排序?
我有一个.txt文件,格式如下: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 =
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