1

我使用 Python 3.3.1(新手)

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

到目前为止我有

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

这按值对字典进行排序——到目前为止一切都很好,但是我如何将值限制在“t”以下,然后只返回键

提前致谢

4

3 回答 3

4

尝试这个:

[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]
于 2013-05-03T18:32:19.383 回答
1

尝试这个

list_integer = filter(lambda x: x[1] < t, dict_int_int.items()))
list_integer = sorted([x[0] for x in list_integer])
于 2013-05-03T18:31:52.357 回答
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为列表推导式。这是因为我们需要打印出它的值,然后再次使用它们。生成器表达式只允许您使用它的值一次。)

于 2013-05-03T18:41:03.010 回答