获取所有实例中属性的字典
get a dictionary of an attribute in all instances
class Players:
def __init__(self, username, score):
self.username = username
self.score = score
如果我创建一个 class 和它的一些具有不同分数的实例,我怎样才能得到一个以用户名作为键、分数作为所有实例的值的字典?
我会在创建实例后更改分数,因此在创建实例时将分数和用户名附加到字典中是行不通的。
非常感谢
作为最简单的方法,您可以这样做
player_instance = Player("name", 0)
...
player_instance.__dict__
这个字典也链接到对象,所以改变字典会改变实例
player_instance.__dict__["score"] = 123456789
# player_instance.score is now 123456789
不过,您不一定希望让您的对象接受通过该字典所做的更改。
通常你通常会做的是创建一个方法来为你生成你想要的数据结构
class Players:
def __init__(self, username, score):
self.username = username
self.score = score
@property
def as_dict(self):
return {"username": self.username, "score": self.score}
一个棘手的方法是使用 attrgetter
来自 operator
from operator import attrgetter
p1 = Players('p1', 10)
p2 = Players('p2', 11)
p3 = Players('p3', 12)
instances = [p1, p2, p3]
d = dict(map(attrgetter('username', 'score'), instances))
print(d)
# {'p1': 10, 'p2': 11, 'p3': 12}
或者没有任何额外的导入
d = dict((obj.username, obj.score) for obj in instances)
class Players:
def __init__(self, username, score):
self.username = username
self.score = score
如果我创建一个 class 和它的一些具有不同分数的实例,我怎样才能得到一个以用户名作为键、分数作为所有实例的值的字典? 我会在创建实例后更改分数,因此在创建实例时将分数和用户名附加到字典中是行不通的。
非常感谢
作为最简单的方法,您可以这样做
player_instance = Player("name", 0)
...
player_instance.__dict__
这个字典也链接到对象,所以改变字典会改变实例
player_instance.__dict__["score"] = 123456789
# player_instance.score is now 123456789
不过,您不一定希望让您的对象接受通过该字典所做的更改。 通常你通常会做的是创建一个方法来为你生成你想要的数据结构
class Players:
def __init__(self, username, score):
self.username = username
self.score = score
@property
def as_dict(self):
return {"username": self.username, "score": self.score}
一个棘手的方法是使用 attrgetter
来自 operator
from operator import attrgetter
p1 = Players('p1', 10)
p2 = Players('p2', 11)
p3 = Players('p3', 12)
instances = [p1, p2, p3]
d = dict(map(attrgetter('username', 'score'), instances))
print(d)
# {'p1': 10, 'p2': 11, 'p3': 12}
或者没有任何额外的导入
d = dict((obj.username, obj.score) for obj in instances)