我们说我有这个数组
input = [['user_id', 'time', 'address'],
['F', 5, 5],
['T', 5, 8],
['B', 6, 6],
['K', 7, 7],
['J', 7, 9],
['M', 9, 10]]
我想对行进行排序 - 首先按索引1(时间)按升序排序。然而,其次,如果给定user_id的索引2(地址),例如' B'小于另一个用户的索引2(地址),例如' T',我喜欢user_id' B'来自user_id' T'。
所以最终输出看起来像这样:
output = [['user_id', 'time', 'address'],
['F', 5, 5],
['B', 6, 6]
['T', 5, 8],
['K', 7, 7],
['J', 7, 9],
['M', 9, 10]]
如果可能的话,我想在没有熊猫的情况下这样做。
答案 0 :(得分:2)
>>> import functools
>>>
>>> def compare(item1, item2):
... return item1[1]-item2[1] if item1[1]-item2[1] >=2 else item1[2]-item2[2]
...
>>>
>>> output = [input[0]] + sorted(input[1:], key = functools.cmp_to_key(compare))
>>> pprint (output)
[['user_id', 'time', 'address'],
['F', 5, 5],
['B', 6, 6],
['T', 5, 8],
['K', 7, 7],
['J', 7, 9],
['M', 9, 10]]
>>>
答案 1 :(得分:-2)
对于内置函数sorted
,您可以提供自定义key
方法。如果key方法返回第1列和第2列的元组,那么它就足够了,所以首先考虑第1列的值,对于该列中具有相同值的行,将按第2列排序。 / p>
data = [['user_id', 'time', 'address'],
['F', 5, 5],
['B', 6, 6],
['T', 5, 8],
['K', 7, 7],
['J', 7, 9],
['M', 9, 10]]
data_sorted = [data[0]] + sorted(data[1:], key = lambda row: (row[1], row[2]))