<p>其他的解决方案对我来说太复杂了。如果需要,可以使用字符串比较,而不必求助于<code>datetime</code>s</p>
<p>下面是我装配在一起的一个定制解决方案,它似乎提供了所需的输出:</p>
<pre class="lang-py prettyprint-override"><code>from collections import defaultdict
from pprint import pprint
from typing import DefaultDict, List
array_data = [['d', 'ssss', '11-04-20', 'Rank:1'],
['a', 'ad', '10-13-20', 'Rank:1'],
['b', 'db', '12-13-20', 'Rank:2'],
['a', 'sd', '05-13-20', 'Rank:3'],
['b', 'esas', '12-14-20', 'Rank:1'],
['a', 'aser', '12-13-20', 'Rank:2']]
final_array = []
group_to_data: DefaultDict[str, List[List[str]]] = defaultdict(list)
for data in array_data:
group_to_data[data[0]].append(data)
def sort_fn(x):
"""Sort by group, then by date"""
month, day, year = x[2].split('-')
return f'{year}{month}{day}'
for _, data in sorted(group_to_data.items(), reverse=True):
# sorts sub-list for each group
data.sort(key=sort_fn)
# iterating over data in reverse order, since that's how we want it in
# final result
for i in range(len(data) - 1, -1, -1):
new_rank = f"Rank:{i + 1}"
item = data[i]
item[-1] = new_rank
final_array.append(item)
pprint(final_array)
</code></pre>