def big(dict, n):
line = []
for k in dict:
if k > n:
line.append(k)
return line
我必须找到dict中大于n的所有元素。
但是,我的代码只返回字典中大于 n 的最大数。
我需要做什么才能使其正确?
def big(dict, n):
line = []
for k in dict:
if k > n:
line.append(k)
return line
我必须找到dict中大于n的所有元素。
但是,我的代码只返回字典中大于 n 的最大数。
我需要做什么才能使其正确?
选项卡return line
太远了,所以它在找到大于的第一个 键时返回(注意:字典不是按您编写的方式排序的),而不是在返回之前遍历所有键。尝试:n
def big(dic, n):
line = []
for k in dic:
if k > n:
line.append(k)
return line
实际上,您可能更喜欢它使用列表推导(并且该函数仅变成一行)。
def big(dic, n):
return [k for k in dic if k>n]
.
字典由键值对组成,{key: value}
当我们迭代字典时,我们正在迭代它的键。这解释了使用变量k
来迭代键。那是,
[k for k in dic] = [key1, key2, ...]
因此,如果您想在字典中找到最大值,您可以使用:
return [dic[k] for k in dic if dic[k]>n]
注意:我已将变量名称更改为dic
因为(正如@AndrewJaffe 提到的)dict
是一个内置对象,在这里重命名它可能会导致意外的事情发生,并且通常被认为是不好的做法。例如,如果您想检查type(dic)==dict
.
def big(dic, n):
line = []
for k in dic:
if dic[k]> n: #compare value instead of key
line.append(k) #use k if you're appending key else dic[k] for val
return line
输出:
>>> print big({'a':10,'b':15, 'c':12},11)
['c']
天真地遍历字典会给你一个键序列。不是价值观。
所以要做你想做的事,你需要itervalues:
for k in d.itervalues(): ### call it "d" rather than "dict"
if k>n:
line.append(k)
或者,正如其他人所指出的,使用列表推导。
另外,不要使用dict
名称,因为它会影响内置函数。
将 return 语句向后移动两个制表符,否则它将返回大于 n 的第一个值。