我正在使用Python 3.3.1(新手)
我有一个带整数键和整数值的字典 我需要对这个字典进行排序并返回一个值列表,其中值低于阈值(比如't')
到目前为止我已经
了list_integer = sorted(dict_int_int.items(), key=lambda x: x[1] )
按值对字典进行排序 - 到目前为止一切正常,但如何将值限制在't'以下,然后只返回键
先谢谢
答案 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
更改为列表推导。这是因为我们需要打印出它的值,然后再次使用它们。生成器表达式只允许你使用它的值一次。)