在Python中,字典按值排序,但只返回键

时间:2013-05-03 18:28:50

标签: python sorting dictionary

我正在使用Python 3.3.1(新手)

我有一个带整数键和整数值的字典 我需要对这个字典进行排序并返回一个值列表,其中值低于阈值(比如't')

到目前为止我已经

list_integer = sorted(dict_int_int.items(), key=lambda x: x[1]  )

按值对字典进行排序 - 到目前为止一切正常,但如何将值限制在't'以下,然后只返回键

先谢谢

3 个答案:

答案 0 :(得分:3)

试试这个:

[key for key,value in sorted(dic.items() ,key=lambda x : x[1]) if value < threshold]

或使用operator.itemgetter

>>> from operator import itemgetter
>>> [key for key,value in sorted(dic.items() ,key= itemgetter(1) ) if value < threshold]

答案 1 :(得分:1)

试试这个

list_integer = filter(lambda x: x[1] < t, dict_int_int.items()))
list_integer = sorted([x[0] for x in list_integer])

答案 2 :(得分:0)

让我们从你拥有的东西开始:

list_integer = sorted(dict_int_int.items(), key=lambda x: x[1])

这为您提供了键值对的列表,按值排序(这使得名称有点误导)。

现在让我们limit the values to be below 't'

list_small = ((k, v) for k, v in list_integer if v < t)

(如果您愿意,也可以将其写为filter。)

现在,让我们ONLY return the keys

list_keys = [k for k, v in list_small]

当然,您可以将这两个步骤中的任何两个结合起来,或者甚至将这三个步骤结合起来(在这种情况下,您最终会得到Ashwini Chaudhary的回答)。


让我们一步一步地确保它们有效:

>>> dict_int_int = {'a': 1.0, 'b': 0.5, 'c': 0.25, 'd': 0.10 }
>>> t = 0.75
>>> list_integer = sorted(dict_int_int.items(), key=lambda x: x[1])
>>> list_integer
[('d', 0.1), ('c', 0.25), ('b', 0.5), ('a', 1.0)]
>>> list_small = [(k, v) for k, v in list_integer if v < t]
>>> list_small
[('d', 0.1), ('c', 0.25), ('b', 0.5)]
>>> list_keys = [k for k, v in list_small]
>>> list_keys
['d', 'c', 'b']

(注意我将生成器表达式list_small更改为列表推导。这是因为我们需要打印出它的值,然后再次使用它们。生成器表达式只允许你使用它的值一次。)