获取所有实例中属性的字典

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)