0

我试图返回字典中所有值大于 int 参数的值。

def big_keys(dict, int):
    count = []
    for u in dict:
        if u > int:
            count.append(u)
    return count

我不明白为什么这不起作用。它返回列表中的每个值,而不仅仅是那些大于 in 的值。

4

2 回答 2

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]

我已经更改了您的变量名称,因为dictint都是内置的。

您的方法实际上是重新创建 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']
于 2013-08-24T05:29:47.893 回答
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
于 2013-08-24T05:29:05.773 回答