【发布时间】:2020-01-21 18:08:23
【问题描述】:
假设我有一个保存员工信息的对象列表:
class Employee(object):
def __init__(self, name):
self.name = name
employees = [Employee('Alice'),
Employee('Bob'),
Employee('Catherine'),
Employee('David')]
每个对象都会有更多的属性,也会有更多的员工,但这被简化了。现在我想访问 Catherine 的 Employee 对象。有没有一种蟒蛇方式来获取凯瑟琳的对象?我知道我可以将对象存储在字典中,并以它们的名称作为键,但这似乎是多余的。
我可以使用[i for i in employees if i.name=='Catherine'] 之类的列表解析,但我想知道是否有更精确的方法,可以访问具有特定、唯一属性的员工,而无需搜索所有员工。
【问题讨论】:
-
你需要一个不同的数据结构来保存它们,比如
dict。这样,key 可以是唯一的属性,比如name,value 是实例 -
这就是为什么
dict不是多余的;它提供了对象列表本身没有的索引。 -
"I know I could store the objects in a dictionary with their name as a key, but that seems redundant"比每次都迭代整个列表的冗余要少得多 -
是的,dict 方法确实是您想要的,因为只有这样您才能“访问特定的唯一属性”
-
打个比方,在这里使用字典而不是列表并不比书后的索引更“冗余”,它列出了书中使用的你可能想要的单词查找,以及它们出现的页码。严格意义上来说,额外的信息是“冗余的”,如果这些页面被从书中撕下,您将能够从其他页面的信息中重建它们。但从某种意义上说,索引可以用于其他页面无法达到的目的,这并不是“冗余”;有效地找到使用单词的页面。
标签: python python-3.x oop