如何返回字典中满足条件的最后一个值

2024-05-17 05:06:04 发布

您现在位置:Python中文网/ 问答频道 /正文

代码应该一直查找钥匙,直到找到没有密码的钥匙为止 对应的值。只有这样才能返回该密钥。如果在跟踪期间或未找到某个键时该键不可用,则必须返回最后一个键。你知道吗

我已经使用递归跟踪到了最终的键/值对,但是我不能返回最终的跟踪值。你知道吗

def rabbit_hole(d, word):    
    for key,val in d.items():    
        if key == word:    
            return rabbit_hole(d,val)

d = {"bat": "pig", "pig": "cat", "cat": "dog", "dog": "ant",
     "cow": "bee", "bee": "elk", "elk": "fly", "ewe": "cod",
     "cod": "hen", "hog": "fox", "fox": "jay", "jay": "doe",
     "rat": "ram", "ram": "rat"}

print(rabbit_hole(d, "bat"))

预期结果:ant
实际结果:无(在这种情况下,我无法返回最后一个值“ant”)


Tags: keyelkvalcatwordcod钥匙bee
2条回答

我想这就是你要找的-

dum = []    

def rabbit_hole(dic, word):    
    dum.append(word)

    if len(dum)>len(dic):
        print("Hey! this input is not right, there's no end to it..")
        return

    for key,val in dic.items():    
        if key == word:    
            return rabbit_hole(dic, val)
    return word

d = {"bat": "pig", "pig": "cat", "cat": "dog", "dog": "ant",
     "cow": "bee", "bee": "elk", "elk": "fly", "ewe": "cod",
     "cod": "hen", "hog": "fox", "fox": "jay", "jay": "doe",
     "rat": "ram", "ram": "mouse"}

print(rabbit_hole(d,"bat"))

递归函数(您已经创建)中的一个重要概念是基本情况。基本情况是停止递归并关闭调用堆栈。在函数中,如果没有找到键,则函数不会返回任何值,在python中,这意味着它的计算结果为None。你知道吗

您应该做的是在循环外以return word结束函数,这样如果函数没有在循环内返回,您就只返回找到的最后一个单词。你知道吗

另外,与问题无关,但一个很好的音符。你循环浏览这些条目是在违背词典的目的。您应该做的是检查您要查找的单词是否在字典中,然后使用键访问器,或者使用.get()例如:

if word in d:
   val = d[word]

或者

val = d.get(word)
if val is not None:
    return val

相关问题 更多 >