我有一个返回布尔值的对象列表,如下所示
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}]
Run Code Online (Sandbox Code Playgroud)
我想以这个优先级返回用户徽章;is_staff 具有最高优先级,然后是供应商,然后是交易者。
如果用户拥有所有徽章,那么我只想将 is_staff 的徽章作为字符串值返回到 = 'staff',因为它具有最高优先级。
喜欢
badge = 'staff'
Run Code Online (Sandbox Code Playgroud)
我有这个功能可以使用。但没有找到返回我想要的值的方法。
@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
Run Code Online (Sandbox Code Playgroud)
不要使用不必要的笨重的字典列表,而是将您的跟踪badges作为将每个徽章名称映射到其值的字典。
在 Python 3 中,字典根据您定义键的方式保留顺序,因此您可以按优先级顺序定义键:
>>> badges = {"staff": False, "vendor": True, "trader": True}
Run Code Online (Sandbox Code Playgroud)
然后只需选择第一个具有真实值的键:
>>> next(b for b, v in badges.items() if v)
'vendor'
Run Code Online (Sandbox Code Playgroud)