如果密钥存储在变量中,如何在字典中获取值?

时间:2018-07-22 19:16:17

标签: python python-3.x function loops dictionary

我需要获取存储在变量中的键的值。变量的值有所不同,输出模式应据此而变化。请检查下面的代码,我似乎没有得到输出。仅当我可以传递给定键的值时,我才能得到它们。如果您指出此程序中的任何其他错误,将是很好的,因为我对此很陌生。谢谢:)

self = {
       "1" : None,
       "0" : "",
       "2" : "abc",
       "3" : "def",
       "4" : "ghi",
       "5" : "jkl",
       "6" : "mno",
       "7" : "pqrs",
       "8" : "uvw",
       "9" : "wxyz"
}
def rec(rest_of_no, path):
        if not rest_of_no:
            combinations.add(path)
            return
        first, rest = rest_of_no[0], rest_of_no[1:]
        letters = self.get[int(first)] 

        for letter in letters:
            rec(rest_of_no, path)
            return combinations 

t = int(input())
for i in range(t):
    n = int(input())
    ar = list(map(int, input().split()))
    combinations = set()
    rec(ar, "")

    print (combinations)

这是我得到的错误:

    Runtime Error:
Runtime ErrorTraceback (most recent call last):
  File "/home/66ec1f75836d265709dd36b77f69f071.py", line 30, in <module>
    rec(ar, "")
  File "/home/66ec1f75836d265709dd36b77f69f071.py", line 19, in rec
    letters=self[int(first)] 
KeyError: 2

1 个答案:

答案 0 :(得分:1)

您的代码有很多不足。首先,为什么要完全使用eval

letters = self.get(first)  
# will do just fine instead of
letters = self.get(eval('first')) 

第二,您的self字典的键(对于不是传递给方法的实例的随机变量来说确实是个坏名字)是字符串。但是ar包含整数,这就是firstintself.get(first)返回None的原因。

此外,正如AndrejKesely指出的那样:

if not rec:
# should probably be 
if not rest_of_no:

使用相同参数的递归调用将导致无限递归,而return rec返回的函数对象可能不是您想要的。仍然需要大量调试;)