Python - 在一个字典中对正数和负数进行排序

时间:2017-06-26 21:14:17

标签: python python-3.x sorting numbers

我想问你我怎样才能在字典中对键(整数)进行排序"升序" ,包括正数和负数。

我有这个排序数字列表(按下面的代码排序):

01.Key: 06
02.Key: 07
03.Key: 21
04.Key: 59
05.Key: -26
06.Key: -17
07.Key: -7
08.Key: -6

但是我想要输出的是这个排序列表:

01.Key: 06
02.Key: 07
03.Key: 21
04.Key: 59
05.Key: -6
06.Key: -7
07.Key: -17
08.Key: -26

目前,我使用此代码按升序对这些数字进行排序(至少对于正数):

sorted_html_output_dict = sorted(html_output_dict.items(), key=lambda x: (x[0] < 0, x), reverse=False)

使用lambda函数有没有任何漂亮的方法呢?

非常感谢你!

2 个答案:

答案 0 :(得分:4)

你快到了。

只需使用abs使排序元组中的第二项成为绝对值。负面来自正面,它们按照下降(绝对意义上升)顺序排序:

sorted(html_output_dict.items(), key=lambda x: (x[0] < 0, abs(x[0])))

样品:

>>> sorted([2, 1, 3, -4, -2,-6], key=lambda x: (x<0, abs(x)))
[1, 2, 3, -2, -4, -6]

答案 1 :(得分:1)

我做出的假设:

  1. 前导零只是某种类型的拼写错误,值实际上是数字。
  2. 您想要一个新的dict作为输出,而不是list。 (您描述的输出在形式上与输入相似,您似乎有dict作为输入。)
  3. 您希望按字典顺序对键进行排序,以形成输出字典的键/值对。
  4. 鉴于这些假设,我认为这段代码可以满足您的需求。这些值的排序与您已经在进行的操作类似(尽管您缺少abs)。按字典顺序对键进行排序,然后将两者组合在一起形成新的dict

    import pprint
    
    d = {
        "01.Key": 6,
        "02.Key": 7,
        "03.Key": 21,
        "04.Key": 59,
        "05.Key": -26,
        "06.Key": -17,
        "07.Key": -7,
        "08.Key": -6,
    }
    
    d_sorted = {
        k:v for k, v in zip(
            sorted(d.keys()),
            sorted(d.values(), 
                key=lambda x: (x < 0, abs(x))
            )
        )
    }
    
    pprint.pprint(d_sorted)
    
    # Output:
    # {'01.Key': 6,
    #  '02.Key': 7,
    #  '03.Key': 21,
    #  '04.Key': 59,
    #  '05.Key': -6,
    #  '06.Key': -7,
    #  '07.Key': -17,
    #  '08.Key': -26}