38

我需要选择某个值或更大值的字典的元素。我知道如何使用列表执行此操作,返回列表中的项目列表大于某个值

但我不确定如何将其翻译成对字典有用的东西。我设法获得(我认为)与大于或等于数字的值相对应的标签,但使用以下仅给出标签:

[i for i in dict if dict.values() >= x]
4

3 回答 3

49

.items()将返回(key, value)对,您可以使用输入到构造函数的列表推导dict来重构过滤器,这将接受一个可迭代的元组。我们的列表理解:dict()(key, value)

>>> d = dict(a=1, b=10, c=30, d=2)
>>> d
{'a': 1, 'c': 30, 'b': 10, 'd': 2}
>>> d = dict((k, v) for k, v in d.items() if v >= 10)
>>> d
{'c': 30, 'b': 10}

如果您不关心在 2.7 版之前的 python 上运行您的代码,请参阅@opatut answer using "dict comprehensions"

{k:v for (k,v) in dict.items() if v > something}
于 2013-09-14T22:41:08.210 回答
20

虽然 nmaier 的解决方案是我要走的路,但请注意,自从 python 2.7+ 以来,已经有了“ dict comprehension ”语法:

{k:v for (k,v) in dict.items() if v > something}

在这里找到:在 Python 中创建具有列表理解的字典。我通过谷歌搜索“python 字典列表理解”,顶帖找到了这个。

解释

  • { .... }包括听写理解
  • k:v要添加到字典中的元素
  • for (k,v) in dict.items()这会遍历字典的所有元组(键值对)
  • if v > something必须适用于要包含的每个值的条件
于 2013-09-14T22:45:36.677 回答
7

dict[i]不想dict.values()dict.values()将返回字典中的整个值列表。

dict = {2:5, 6:2}
x = 4
print [dict[i] for i in dict if dict[i] >= x] # prints [5]
于 2013-09-14T22:40:24.800 回答