【发布时间】:2017-11-23 11:42:44
【问题描述】:
我有一个这样的字典列表:
my_list=[{'c': '1/2014'},
{'c': '1/2015'},
{'c': '10/2014'},
{'c': '2/2014'},
{'c': '3/2014'},
{'c': '1/2011'},
{'c': '2/2011'},
{'c': '3/2011'},
{'c': '6/2014'},
{'c': '5/2014'},
{'c': '10/2014'},
{'c': '2/2015'},
{'c': '4/2015'},
{'c': '3/2015'},
{'c': '5/2016'},
{'c': '1/2017'}]
我想按 c 键排序我的列表。 密钥有两个部分:year_counter / year,所以首先我必须按年排序,然后按 year_counter,在每年的组内。 最后我希望有这个:
my_list=[{'c': '1/2011'},
{'c': '2/2011'},
{'c': '3/2011'},
{'c': '1/2014'},
{'c': '2/2014'},
{'c': '3/2014'},
{'c': '5/2014'},
{'c': '6/2014'},
{'c': '10/2014'},
{'c': '1/2015'},
{'c': '2/2015'},
{'c': '3/2015'},
{'c': '4/2015'},
{'c': '11/2015'},
{'c': '5/2016'},
{'c': '1/2017'}]
实现这一目标的最有效方法是什么?
【问题讨论】:
-
是的,我试过这个:sorted(my_list, key=lambda x: (x['c']).split('/')[::-1], reverse=False)。但是,我需要像整数一样考虑 tyer counter。如果我使用这种方式,我会得到: [{'c': '1/2011'}, {'c': '2/2011'}, {'c': '3/2011'}, {'c': '1/2014'}, {'c': '10/2014'}, {'c': '10/2014'}, {'c': '2/2014'}, {'c': '3 /2014'}, {'c': '5/2014'}, {'c': '6/2014'}, {'c': '1/2015'}....}] 并得到 {' c': '1/2014'}, {'c': '10/2014'}, {'c': '10/2014'}, {'c': '2/2014'},而不是 {' c': '1/2014'}, {'c': '2/2014'}, {'c': '10/2014'}, {'c': '10/2014'},
-
只需将两者都转换为 int 即可。
[int(i) for i in v['c'].split('/')][::-1]。它不漂亮,但似乎有效。 -
好的,谢谢。它工作。
标签: python python-3.x list sorting dictionary