对不起一个简单的问题,我想我的基本循环错误。我不确定为什么我没有达到预期的结果。
Comp = {'Red':100, 'Blue':101, 'Green':102 ,'Ivory':103, 'White':104}
Comp ['Black'] = 99
def value_for_value(d, mynumber):
for key, value in d.iteritems():
print key,value,type(value),mynumber,type(mynumber)
mykey = 'AAA'
if value == mynumber:
mykey = key
return mykey
print value_for_value(Comp,99)
预期结果:黑色
实际结果: AAA
PS:为了确保我正在比较正确的数据类型,我也打印了数据类型。
答案 0 :(得分:4)
问题在于,每次循环时,都会设置mykey = 'AAA'
。因此,除非str
恰好是最后一个值,否则您将用错误的答案覆盖正确答案。
让我们再添加一些打印件以便更好地看到:
def value_for_value(d, str):
for key, value in d.iteritems():
mykey = 'AAA'
if value == str:
mykey = key
print key,value,type(value),str,type(str),mykey
return mykey
>>> value_for_value(Comp, 99)
Blue 101 <type 'int'> 99 <type 'int'> AAA
Ivory 103 <type 'int'> 99 <type 'int'> AAA
Black 99 <type 'int'> 99 <type 'int'> Black
Green 102 <type 'int'> 99 <type 'int'> AAA
White 104 <type 'int'> 99 <type 'int'> AAA
Red 100 <type 'int'> 99 <type 'int'> AAA
'AAA'
那么,你如何解决它?简单:只需将回退值移到循环外部,因此您只需执行一次:
def value_for_value(d, str):
mykey = 'AAA'
for key, value in d.iteritems():
if value == str:
mykey = key
print key,value,type(value),str,type(str),mykey
return mykey
现在:
>>> value_for_value(Comp, 99)
Blue 101 <type 'int'> 99 <type 'int'> AAA
Ivory 103 <type 'int'> 99 <type 'int'> AAA
Black 99 <type 'int'> 99 <type 'int'> Black
Green 102 <type 'int'> 99 <type 'int'> Black
White 104 <type 'int'> 99 <type 'int'> Black
Red 100 <type 'int'> 99 <type 'int'> Black
'Black'
值得注意的是,如果您构建了一个反向字典并将其编入索引,那么整个事情会更简单:
>>> CompInverse = {value: key for key, value in Comp.iteritems()}
>>> CompInverse.get(99, 'AAA')
'Black'
答案 1 :(得分:1)
我认为这样写起来更清楚:
def value_for_value(d, str):
for k, v in d.iteritems():
if v == str:
return k
return 'AAA'
不会key_for_value
是一个更有意义的名字吗?
如果你在不修改d