代码之家  ›  专栏  ›  技术社区  ›  vasili111

使用sorted()按每个元组的第一个值对元组进行排序

  •  0
  • vasili111  · 技术社区  · 6 年前

    我需要按每个元组的第一个值对元组列表进行排序。我有密码:

    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)
    

    内容 x :看起来像:

     [(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')]
    

    我需要输出如下:

     [(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')]
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Jan    6 年前

    使用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.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')]
    

    或-与 reverse = True :

    lst = sorted(lst, key=lambda x: x[0], reverse=True)
    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')]
    


    作为 @Barmar 正确地指出,您甚至不需要lambda表达式,因此 lst = sorted(lst) 完全可以。
    lst1 = sorted(lst, key=lambda x: x[0])
    lst2 = sorted(lst)
    assert lst1 == lst2