Skip to main content
 首页 » 编程设计

python之按元组值日期对象对字典进行排序

2025年05月04日13飞鱼

我有以下字典我想按元组中的日期对象对它进行排序

final_dict={'102 Not Out': "('75', '2018-05-04 00:00:00'),N/A", 
'2.0': "('84', '2019-01-01 00:00:00'),8.5", 
'3 Dev': "('0', '2018-05-11 00:00:00'),No IMDB Info Available", 
'Adityam': "('34', '2018-04-27 00:00:00'),No IMDB Info Available", 
'Ajay Devgn – Luv Ranjan’s Next': "('63', '2018-10-19 00:00:00'),No IMDB Info Available", 
'Arjun Patiala': "('0', '2018-09-13 00:00:00'),No IMDB Info Available", 
'Baazaar': "('60', '2018-05-01 00:00:00'),N/A"} 

我有以下代码,但它不起作用 - 它只按键对字典进行排序,

OrderedDict(sorted(final_dict.items(), key=lambda t: t[0])) 
 
OR 
 
sorted(final_dict.items(),key=lambda x: x[1][2]) 

寻找以下输出:

{'Adityam': "('34', '2018-04-27 00:00:00'),No IMDB Info Available", 
'Baazaar': "('60', '2018-05-01 00:00:00'),N/A", 
'102 Not Out': "('75', '2018-05-04 00:00:00'),N/A", 
'3 Dev': "('0', '2018-05-11 00:00:00'),No IMDB Info Available", 
'Arjun Patiala': "('0', '2018-09-13 00:00:00'),No IMDB Info Available", 
'Ajay Devgn – Luv Ranjan’s Next': "('63', '2018-10-19 00:00:00'),No IMDB Info Available", 
'2.0': "('84', '2019-01-01 00:00:00'),8.5", 
} 

有人可以帮忙吗?

请您参考如下方法:

这是使用 collections.OrderedDict 和 ast.literal_eval 的一种方式。

如前所述,如果可能的话,最好在数据到达字典之前解决这些问题。

from collections import OrderedDict 
from ast import literal_eval 
 
res = OrderedDict(sorted(final_dict.items(), 
                  key=lambda x: literal_eval(x[1].split('),')[0]+')')[1])) 

结果:

OrderedDict([('Adityam', "('34', '2018-04-27 00:00:00'),No IMDB Info Available"), 
             ('Baazaar', "('60', '2018-05-01 00:00:00'),N/A"), 
             ('102 Not Out', "('75', '2018-05-04 00:00:00'),N/A"), 
             ('3 Dev', "('0', '2018-05-11 00:00:00'),No IMDB Info Available"), 
             ('Arjun Patiala', "('0', '2018-09-13 00:00:00'),No IMDB Info Available"), 
             ('Ajay Devgn – Luv Ranjan’s Next', "('63', '2018-10-19 00:00:00'),No IMDB Info Available"), 
             ('2.0', "('84', '2019-01-01 00:00:00'),8.5")])