在python中对数组进行排序
我有一个可变数字数组。我有另一个数组,我想成为数字数组的标签。
myList = [T1_sum, T2_sum, T3_sum, T4_sum, T5_sum, T6_sum, T7_sum, T8_sum, T9_sum, T10_sum]
mylables = ["cats", "dogs", "monkey", "fish", "rabbit", "owl", "pig", "goat", "cow", "bull"]
我想按最高到最低值对数组进行排序。我这样做了:
sortedlist = sorted(myList, reverse=True)
但是,如何重新排列标签以使它们与值一致?我需要保留它,以便 asortedlabellist是它自己的单个数组(用于将来的事情)。所以我可能必须将值链接到标签,然后sortedlabellist单独拉出一个?
回答
您可以形成一个字典,以便在排序时保持两个列表的顺序:
>>> labelToSum = {key:value for key,value in zip(mylables, myList)}
>>> labelToSum
{'cats': 2,
'dogs': 4,
'monkey': 1,
'fish': 7,
'rabbit': 3,
'owl': 8,
'pig': 4,
'goat': 5,
'cow': 9,
'bull': 4}
然后你可以根据值对这个字典进行排序,如下所示:
>>> {k: v for k, v in reversed(sorted(labelToSum.items(), key=lambda item: item[1]))}
{'cow': 9,
'owl': 8,
'fish': 7,
'goat': 5,
'bull': 4,
'pig': 4,
'dogs': 4,
'rabbit': 3,
'cats': 2,
'monkey': 1}
- This assumes the keys are unique (probably okay here). Also sorting and putting back into a dict fails prior to python 3.7/3.6 where dicts don't retain insertion order