【问题标题】:Python sort() issue with negative valuesPython sort() 负值问题
【发布时间】:2019-01-15 12:51:16
【问题描述】:

大家好,

我在使用 sorted() 函数对我的 dict 中的百分比值进行排序时遇到了问题。当我得到负数时,它首先对最大的负数进行排序,然后是第二大的负数等。我希望最小的负数首先出现。有没有办法修改我的 sorted() 来实现这一点?干杯!

yoy_dict = sorted(yoy_dict.items(), key=lambda x: x[1], reverse = True)

yoy_dict = [('HOUGANG', '1.130759%'),

 ('JURONG EAST', '0.786807%'),

 ('PUNGGOL', '0.238738%'),

 ('SEMBAWANG', '-2.150383%'),

 ('WOODLANDS', '-2.043103%'),

 ('CHOA CHU KANG', '-1.923021%'),

 ('SENGKANG', '-1.548278%'),

 ('MARINE PARADE', '-1.445532%'),

 ('CENTRAL AREA', '-1.266556%'),

 ('JURONG WEST', '-1.037612%'),

 ('YISHUN', '-0.843832%'),

 ('BUKIT BATOK', '-0.296952%')]

【问题讨论】:

    标签: python list sorting dictionary


    【解决方案1】:

    您需要将值转换为float 以避免对字符串进行排序:

    res = sorted(yoy_dict.items(), key=lambda x: float(x[1][:-1]), reverse=True)
    

    结果:

    print(res)
    
    [('HOUGANG', '1.130759%'),
     ('JURONG EAST', '0.786807%'),
     ('PUNGGOL', '0.238738%'),
     ('BUKIT BATOK', '-0.296952%'),
     ('YISHUN', '-0.843832%'),
     ('JURONG WEST', '-1.037612%'),
     ('CENTRAL AREA', '-1.266556%'),
     ('MARINE PARADE', '-1.445532%'),
     ('SENGKANG', '-1.548278%'),
     ('CHOA CHU KANG', '-1.923021%'),
     ('WOODLANDS', '-2.043103%'),
     ('SEMBAWANG', '-2.150383%')]
    

    【讨论】:

    • 如 jpp 在上面的评论中所述,如果您希望对它们进行数学排序,则应在对它们进行排序之前将它们转换为浮点数。否则,您只是根据它们的 ASCII 代码对字符串进行排序。
    • 明白了!干杯=)
    • @hakkonen,没问题,如果此解决方案解决了您的问题,请随时 accept(左侧的绿色勾号)。
    【解决方案2】:

    您的问题似乎是由于使用字符串而不是数字来存储百分比值。您需要将字符串转换为浮点数。

     key=lambda x: float(x[1][:-1])
    

    注意:

    10 > 9  # True
    '10' > '9'  # False
    

    这是因为字符串被及时比较一个字符。当 Python 在两个字符串中找到第一个不同的字符时,它会选择最大的并停在这里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 2012-11-17
      • 2023-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多