2015-07-10 51 views
2

问题是编写一个Python函数,该函数返回aDict中具有值目标的键的列表。字典中的所有键和值都是整数,我们返回的列表中的键必须按升序排列。查找整数字典中的值的键

这是我迄今为止的工作:我不断获取

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: argument of type 'int' is not iterable"

,但我真的不明白这意味着什么,以及如何解决它。如果有人能帮忙,我会很感激!

+0

你可以添加跟踪? –

+1

你也可以显示输入和预期输出吗? –

+0

这看起来很奇怪:'aDict [key]'中的目标'。如果aDict [key]是一个整数,那么这个整数中的目标是什么意思? –

回答

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而不是它下面的行。

+0

这很有道理!非常感谢,我一直试图弄清楚这一点。 – jaycechan

0

您的aDict[key]是一个int,因此不可迭代,即您不能使用if target in aDict[key]:您将不得不将值更改为字符串。

if str(target) in str(aDict[key]) 

if target == aDict[key] 

虽然第二个选项必须是完全匹配的。它是不清楚你具体什么后

0

当你在做

if target in aDict[key] 

你基本上检查,如果目标是在某种排列,但aDict [关键]是不是一个数组,它是一个整数!你想检查目标是否等于aDict [key],而不是如果它包含在aDict [key]中。

因此,做

if target == aDict[key] 

迭代是当你通过一个访问一个集合的每一个元素。但是,一个整数不是一个集合,它是一个数字!

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 

//这会做你的任务。 :)

相关问题