如何确定从列表返回对象的优先级



我有一个像这样返回布尔值的对象列表

badges = [{"is_staff": self.sender.is_staff},
{"is_vendor": self.sender.is_vendor}, {"is_trader": self.sender.is_trader}]
# or we can write this like that; 
badges = [{"is_staff": True}, {"is_vendor": False}, {"is_trader": True}]

我想以这个优先级返回用户徽章;Is_staff的优先级最高,然后是vendor,最后是trader。

如果用户拥有所有徽章,那么我想只返回is_staff的徽章作为字符串值= 'staff',因为它具有最高的优先级。

badge = 'staff'

我要处理这个函数。但是没有找到返回我想要的值的方法。

@property
def badge(self):
"Returns the user's designation if the user is Staff, Vendor, Trader."
badges = [{"is_staff": self.sender.is_staff},
{"is_vendor": self.sender.is_vendor}, {"is_trader": self.sender.is_trader}]
badge = ''
# need help there to find the value on the basis of badges 
return badge

与其使用字典列表,不如将badges作为将每个徽章名称映射到其值的字典来跟踪。

在Python 3中,字典根据你定义键的方式保持顺序,所以你可以按优先级顺序定义键:

>>> badges = {"staff": False, "vendor": True, "trader": True}

,然后简单地选择第一个具有真值的键:

>>> next(b for b, v in badges.items() if v)
'vendor'