Python 使用sorted()按每个元组的第一个值对元组进行排序
我需要按每个元组的第一个值对元组列表进行排序。我有密码:Python 使用sorted()按每个元组的第一个值对元组进行排序,python,python-3.x,sorting,Python,Python 3.x,Sorting,我需要按每个元组的第一个值对元组列表进行排序。我有密码: import pandas as pd import numpy as np a= np.array([7.33442355e-02, 0.00000000e+00, 6.29090705e-02, 4.11437985e-02, 1.46726854e-02, 1.41064835e-02, 1.48742809e-02, 1.42575993e-02, 3.66158981e-01, 5.64191792
import pandas as pd
import numpy as np
a= np.array([7.33442355e-02, 0.00000000e+00, 6.29090705e-02, 4.11437985e-02, 1.46726854e-02,
1.41064835e-02, 1.48742809e-02, 1.42575993e-02, 3.66158981e-01,
5.64191792e-02, 1.08792957e-01, 5.33510773e-02, 1.03114883e-02,
1.64780994e-01, 6.02803867e-05, 1.96041560e-03, 2.85647464e-03])
b= ['longitude',
'some_var',
'latitude',
'housing_median_age',
'total_rooms',
'total_bedrooms',
'population',
'households',
'median_income',
'rooms_per_hhold',
'pop_per_hhold',
'bedrooms_per_room',
'<1H OCEAN',
'INLAND',
'ISLAND',
'NEAR BAY',
'NEAR OCEAN']
x=sorted(zip(a, b), reverse=True)
我需要输出如下所示:
[(0.0, 'some_var'),
(6.02803867e-05, 'ISLAND'),
(0.0019604156, 'NEAR BAY'),
(0.00285647464, 'NEAR OCEAN'),
(0.0103114883, '<1H OCEAN'),
(0.0141064835, 'total_bedrooms'),
(0.0142575993, 'households'),
(0.0146726854, 'total_rooms'),
(0.0148742809, 'population'),
(0.0411437985, 'housing_median_age'),
(0.0533510773, 'bedrooms_per_room'),
(0.0564191792, 'rooms_per_hhold'),
(0.0629090705, 'latitude'),
(0.0733442355, 'longitude'),
(0.108792957, 'pop_per_hhold'),
(0.164780994, 'INLAND'),
(0.366158981, 'median_income')]
[(0.0,'some_var'),
(6.02803867e-05,“岛”),
(0.0019604156,'近海湾'),
(0.00285647464,“海洋附近”),
(0.0103114883,“使用lambda表达式:
lst = [(0.366158981, 'median_income'),
(0.164780994, 'INLAND'),
(0.108792957, 'pop_per_hhold'),
(0.0733442355, 'longitude'),
(0.0629090705, 'latitude'),
(0.0564191792, 'rooms_per_hhold'),
(0.0533510773, 'bedrooms_per_room'),
(0.0411437985, 'housing_median_age'),
(0.0148742809, 'population'),
(0.0146726854, 'total_rooms'),
(0.0142575993, 'households'),
(0.0141064835, 'total_bedrooms'),
(0.0103114883, '<1H OCEAN'),
(0.00285647464, 'NEAR OCEAN'),
(0.0019604156, 'NEAR BAY'),
(6.02803867e-05, 'ISLAND'),
(0.0, 'some_var')]
lst = sorted(lst, key=lambda x: x[0])
print(lst)
这将产生
[(0.366158981, 'median_income'), (0.164780994, 'INLAND'), (0.108792957, 'pop_per_hhold'), (0.0733442355, 'longitude'), (0.0629090705, 'latitude'), (0.0564191792, 'rooms_per_hhold'), (0.0533510773, 'bedrooms_per_room'), (0.0411437985, 'housing_median_age'), (0.0148742809, 'population'), (0.0146726854, 'total_rooms'), (0.0142575993, 'households'), (0.0141064835, 'total_bedrooms'), (0.0103114883, '<1H OCEAN'), (0.00285647464, 'NEAR OCEAN'), (0.0019604156, 'NEAR BAY'), (6.02803867e-05, 'ISLAND'), (0.0, 'some_var')]
使用lambda表达式:
lst = [(0.366158981, 'median_income'),
(0.164780994, 'INLAND'),
(0.108792957, 'pop_per_hhold'),
(0.0733442355, 'longitude'),
(0.0629090705, 'latitude'),
(0.0564191792, 'rooms_per_hhold'),
(0.0533510773, 'bedrooms_per_room'),
(0.0411437985, 'housing_median_age'),
(0.0148742809, 'population'),
(0.0146726854, 'total_rooms'),
(0.0142575993, 'households'),
(0.0141064835, 'total_bedrooms'),
(0.0103114883, '<1H OCEAN'),
(0.00285647464, 'NEAR OCEAN'),
(0.0019604156, 'NEAR BAY'),
(6.02803867e-05, 'ISLAND'),
(0.0, 'some_var')]
lst = sorted(lst, key=lambda x: x[0])
print(lst)
这将产生
[(0.366158981, 'median_income'), (0.164780994, 'INLAND'), (0.108792957, 'pop_per_hhold'), (0.0733442355, 'longitude'), (0.0629090705, 'latitude'), (0.0564191792, 'rooms_per_hhold'), (0.0533510773, 'bedrooms_per_room'), (0.0411437985, 'housing_median_age'), (0.0148742809, 'population'), (0.0146726854, 'total_rooms'), (0.0142575993, 'households'), (0.0141064835, 'total_bedrooms'), (0.0103114883, '<1H OCEAN'), (0.00285647464, 'NEAR OCEAN'), (0.0019604156, 'NEAR BAY'), (6.02803867e-05, 'ISLAND'), (0.0, 'some_var')]
为什么6.02803867e-05
应该排在第一位?因为指数,它是一个非常小的值,而不是最高的值。import操作符
和lst.sort(key=operator.itemgetter(0))
@Barmar你说得对。我怎么会错过它是用科学记数法写的呢?非常感谢你的评论!@GrijeshChauhan,这不是必须的。元组是按字典顺序排列的,所以它默认按第一个元素排序。@Barmar是的,正确。谢谢你提醒我。6.02803867e-05
为什么要排在第一位?因为指数,它是一个非常小的值,不是最高值。import操作符
和lst.sort(key=operator.itemgetter(0))
@Barmar你说得对。我怎么会错过它是用科学记数法写的呢?非常感谢你的评论!@GrijeshChauhan,这不是必需的。元组是按字典顺序排列的,所以它默认按第一个元素排序。@Barmar是的,正确。谢谢你提醒我。你不需要lambda表达式。元组是按字母顺序进行比较的以图像方式,它会自动首先比较第一个元素。您不需要lambda表达式。元组是按字典进行比较的,因此它会自动首先比较第一个元素。
[(0.366158981, 'median_income'), (0.164780994, 'INLAND'), (0.108792957, 'pop_per_hhold'), (0.0733442355, 'longitude'), (0.0629090705, 'latitude'), (0.0564191792, 'rooms_per_hhold'), (0.0533510773, 'bedrooms_per_room'), (0.0411437985, 'housing_median_age'), (0.0148742809, 'population'), (0.0146726854, 'total_rooms'), (0.0142575993, 'households'), (0.0141064835, 'total_bedrooms'), (0.0103114883, '<1H OCEAN'), (0.00285647464, 'NEAR OCEAN'), (0.0019604156, 'NEAR BAY'), (6.02803867e-05, 'ISLAND'), (0.0, 'some_var')]
lst1 = sorted(lst, key=lambda x: x[0])
lst2 = sorted(lst)
assert lst1 == lst2