Python:处理循环中不存在的字典值

Python:处理循环中不存在的字典值,python,dictionary,hash,key,keyerror,Python,Dictionary,Hash,Key,Keyerror,我是python新手,但有perl方面的经验。所以我有一本这样的字典 d = { '123' : 'F' '124' : 'S' '125' : 'F' } 我正在为一个包含键值的列表运行一个循环,但有些可能不存在于我的字典中。当我运行代码时,我得到一个错误 print(d[str(row[0])]) KeyError: '126' Perl永远不会这样对我。请帮助无知的程序员。您可以使用不会引发键错误的异常: key = str(row[0]) try:

我是python新手,但有perl方面的经验。所以我有一本这样的字典

d = { '123' : 'F'
      '124' : 'S'
      '125' : 'F'
    }
我正在为一个包含键值的列表运行一个循环,但有些可能不存在于我的字典中。当我运行代码时,我得到一个错误

print(d[str(row[0])])


KeyError: '126'
Perl永远不会这样对我。请帮助无知的程序员。

您可以使用不会引发
键错误的
异常:

key = str(row[0])
try:
    print(d[key])
except KeyError:
    print("Key '{}' not found".format(key)
如果键在字典中,则返回键的值,否则为默认值。如果 默认值未给定,它默认为“无”,因此此方法不会 引发一个键错误

或者,在尝试通过键获取值之前,可以检查字典中是否有键:

key = str(row[0])
if key in d:
    print(d[key])
或者,您也可以捕获
keyrerror
异常:

key = str(row[0])
try:
    print(d[key])
except KeyError:
    print("Key '{}' not found".format(key)

我想最好的方法是

my_dict.get(key,None)

Python比Perl更面向对象—因此您可以轻松地派生自己的
dict
子脚本,当试图访问丢失的密钥时,它可以执行任何您想要的操作。然而,编写难以阅读的代码需要更多的努力,但这是可以做到的。例如:

class MyDict(dict): __missing__ = lambda _, k: '%s?' % k

d = MyDict((('123', 'F'), ('124', 'S'), ('125', 'F'),))

row = 126, 123, 124
print(d[str(row[0])])  # -> 126?

但是,如果您要费劲地检查,通常最好只捕获异常。它被认为是好的python风格:“请求原谅比获得许可更容易”,格言说。@alexis同意,谢谢,将包括在答案中。@alexis应该说“原谅我”:)你希望它做什么?不要这样做:这就是集合。defaultdict
的目的。alexis:不完全一样。与
defaultdict
不同,这不会将缺少的条目添加到字典中。