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