Python 将字典值传递给函数,但缺少键

Python 将字典值传递给函数,但缺少键,python,Python,我有一个带有构造函数的类,它接收多个参数。这些参数来自一个外部文件,它是一个字典列表 我的问题是有些词典缺少字段。如果缺少一个字段,我希望构造函数只接收一个字段。但是现在编写代码时,它会出现异常 这是一个简单的情况说明 class Person() def __init__(self, id, age, name, gender): self.id = id self.age = age self.name = name

我有一个带有构造函数的类,它接收多个参数。这些参数来自一个外部文件,它是一个字典列表

我的问题是有些词典缺少字段。如果缺少一个字段,我希望构造函数只接收一个字段。但是现在编写代码时,它会出现异常

这是一个简单的情况说明

class Person()
    
    def __init__(self, id, age, name, gender):
        self.id = id
        self.age = age
        self.name = name
        self.gender = gender
        

people_list = pickle.load(open("some_file.p", "rb"))
first_person = people_list[0]  # this is a dictionary {'id': '1234', 'age': 27, 'name': 'robert'}
Person(first_person['id'], first_person['age'], first_person['name'], first_person['gender'])

由于代码是现在编写的,我得到一个例外,“性别”在字典中不作为键存在,这是真的。我希望任何缺少的字段都能传递一个None值,但不需要执行十亿个if或try。。例外。有什么好办法吗?显然,不会产生异常。

通常,如果dict不存在,您可以使用默认值从dict获取一个值:

d = {'a': 1}
print(d.get('b'))  # prints None
但在你的情况下,这更合适:

class Person():
    # the defaults are defined in the constructor
    def __init__(self, id, age=None, name=None, gender=None):
        self.id = id
        self.age = age
        self.name = name
        self.gender = gender
        

people_list = pickle.load(open("some_file.p", "rb"))
for person in people_list:
    Person(**person)  # assuming they at least all have an 'id'
当然,这只有在字典的键与参数的名称完全匹配时才有效

**运算符“解包”字典,因此:

d = {'a': 1, 'b': 2}
f(**d)
同:

f(a=1, b=2)

你只是在寻找默认值吗?def\uuuu init\uuuu self,id=None,age=None,name=None,gender=None?不。默认值不能解决访问字典中不存在的密钥时出现异常的问题。哦…使用first\u person。get'id'将默认为None。非常感谢,我不知道python中字典的.get方法。这就解决了问题。我试一试。非常感谢你们,我会接受你们的回答。