我试图返回字典中值大于int argurment的所有值。
def big_keys(dict, int):
count = []
for u in dict:
if u > int:
count.append(u)
return count
我不明白为什么这不起作用。它返回列表中的每个值,而不仅仅是那些大于in的值。
答案 0 :(得分:7)
默认情况下,任何dict都会遍历其键,而不是其值:
>>> d = {'a': 1, 'b': 2}
>>> for i in d:
... print i
...
a
b
要迭代值,请使用.values()
:
>>> for i in d.values():
... print i
...
1
2
考虑到这一点,您的方法可以简化:
def big_keys(d, i):
return [x for x in d.values() if x > i]
我更改了您的变量名称,因为dict
和int
都是内置函数。
您的方法实际上正在重新创建Python中可用的默认功能。 filter
方法执行您要执行的操作:
>>> d = {'a': 1, 'b': 6, 'd': 7, 'e': 0}
>>> filter(lambda x: x > 5, d.values())
[6, 7]
从您的评论中,您似乎在寻找键,而不是值。以下是您将如何做到这一点:
>>> d = {'a': 21, 'c': 4, 'b': 5, 'e': 30, 'd': 6, 'g': 4, 'f': 2, 'h': 20}
>>> result = []
>>> for k,v in d.iteritems():
... if v > 20:
... result.append(k)
...
>>> result
['a', 'e']
或者,更短的方式:
>>> [k for k,v in d.iteritems() if v > 20]
['a', 'e']
答案 1 :(得分:2)
迭代字典产生字典的键。
>>> d = {'key1': 'value1', 'key2': 'value2'}
>>> for x in d:
... print(x)
...
key2
key1
要获取值,请使用dict.values()
:
>>> for x in d.values():
... print(x)
...
value2
value1
所以,你的程序应该如下:
def big_keys(dict, int):
count = []
for u in dict.values():
if u > int:
count.append(u)
return count