如何将多个对象属性存储到一个字典键?

2024-06-17 11:39:49 发布

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

一般来说,我对python和编程的世界还比较陌生,我很少鼓起勇气去问问题,但我被绊倒了,所以我想我应该好好学习并寻求帮助。在

我在做通讯录。在

class Person():

    def __init__(self,name,number,email):
        self.name = name
        self.number = number
        self.email = email
contact = Person('Mike','1-800-foo-spam','email@email.com')

我的问题是如何在字典中存储所有这些属性联系人姓名作为钥匙和联系人号码以及联系人电子邮件作为价值观。在

额外的问题。 字典应该在类外,也许在主函数中? 或 它是否需要是一个类变量(不完全确定这些变量是如何工作的) 或对象变量

有点像

^{pr2}$

任何帮助都将不胜感激。在

谢谢你!在


Tags: nameselfnumber字典initemaildef编程
3条回答

如果我把这些信息放到字典里,我会这样做:

class Person():

    def __init__(self,name,number,email):
        self.name = name
        self.number = number
        self.email = email
        self.storage = {self.name: [self.number, self.email]}

    def getStorage(self):
        return self.storage

contact = Person('Mike','1-800-foo-spam','email@email.com')

print contact.storage
# or
print contact.getStorage()

但是字典的全部思想是有一些键和相应的值。在这个例子中,它总是只有一个。所以,我想到了另一个模式:

^{pr2}$

问题标题的答案是:一个值应该是一个允许在里面有一个“list”的对象类型(例如,list、tuple、另一个dictionary或具有许多属性的自定义类型对象)

你可以很容易地得到一个以元组为值的字典。在

a = {}
a["bob"] = ("1-800-whatever","bob@gmail.com")

如果要使其成为类变量,只需创建一个空字典作为Person类的一部分:

class Person():

    storage = {}

{cd2>你可以在新的个人信息字典中存储:

^{pr2}$

如您所见,类属性是用类名访问的,但在其他方面与任何其他属性一样。如果需要更新它们,可以将它们存储为元组或列表。但是,如果要进行更改,最好存储实际的Person对象,以避免同时更新{}和实际的person。这更容易做到:

def __init__(self,name,number,email):
    self.name = name
    self.number = number
    self.email = email
    Person.storage[name] = self

self引用使用__init__创建的Person的实例。你的例子就是迈克。然后可以按属性访问它们的值:

Person.storage["Mike"].number

另外,正如Kevin在评论中指出的那样,您可能需要检测密钥是否已经存在,以避免覆盖旧条目(例如,如果字典中已经有Mike):

    self.email = email
    if name in Person.storage:
        # Make unique name
    Person.storage[name] = (number, email)

相关问题 更多 >