问题是编写一个Python函数,该函数返回aDict中具有值target的键列表。字典中的所有键和值都是整数,我们返回的列表中的键必须按递增顺序排列。
这是我到目前为止的工作:
def keysWithValue(aDict, target):
'''
aDict: a dictionary
target: an integer
'''
ans = []
if target not in aDict.values():
return ans
else:
for key in aDict.keys():
if target in aDict[key]:
ans+=[key]
return ans.sort()
我继续说:
“TypeError:'int'类型的参数不可迭代”
但我真的不明白这意味着什么,以及如何解决它。如果有人可以提供帮助,我将非常感激!
答案 0 :(得分:1)
问题在这里
if target in aDict[key]:
您正在尝试迭代一个不起作用的整数值。
您应该使用
if target == aDict[key]:
您可以像这样重构代码。我已经假设您的输入数据是什么样的。如果我错了,我可以调整我的答案。
d = {1:1, 2:2, 3:3, 4:3, 5:3}
def keysWithValue(aDict, target):
ans = []
#for k, v in aDict.iteritems():
for k, v in aDict.items():
if v == target:
ans.append(k)
return sorted(ans)
print(keysWithValue(d, 3))
注释行应该用于python 2.x而不是它下面的行。
答案 1 :(得分:0)
您的aDict[key]
是一个int,因此不可迭代,即您不能使用if target in aDict[key]:
,您必须将值更改为字符串。
if str(target) in str(aDict[key])
或
if target == aDict[key]
虽然第二个选项必须完全匹配。
之后,目前还不清楚你的具体内容答案 2 :(得分:0)
当你做的时候
if target in aDict[key]
你基本上检查目标是否在某种数组中,但是aDict [key]不是数组,它是一个整数!您想要检查target是否等于aDict [key],而不是它是否包含在aDict [key]中。
因此,做
if target == aDict[key]
迭代是指逐个访问集合的每个元素。但是,整数不是集合,而是数字!
答案 3 :(得分:0)
def keysWithValue(aDict, target):
'''
aDict: a dictionary
target: an integer
'''
ans = []
if target not in aDict.values():
return ans
else:
for key in aDict.keys():
if target == aDict[key]:
ans.append(key)
ans.sort()
return ans
//这将完成你的任务。 :)