在整数字典中查找值的键

时间:2015-07-10 23:56:11

标签: python

问题是编写一个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'类型的参数不可迭代”

但我真的不明白这意味着什么,以及如何解决它。如果有人可以提供帮助,我将非常感激!

4 个答案:

答案 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

//这将完成你的任务。 :)