我想问你我怎样才能在字典中对键(整数)进行排序"升序" ,包括正数和负数。
我有这个排序数字列表(按下面的代码排序):
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函数有没有任何漂亮的方法呢?
非常感谢你!
答案 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)
我做出的假设:
dict
作为输出,而不是list
。 (您描述的输出在形式上与输入相似,您似乎有dict
作为输入。)鉴于这些假设,我认为这段代码可以满足您的需求。这些值的排序与您已经在进行的操作类似(尽管您缺少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}