仅显示字典中的 True 值

Are*_*res 1 python discord discord.py

我正在尝试显示字典中成员的权限,如下所示

\n
permdict = {\n                    'Administrator': f'{member.guild_permissions.administrator}',\n                    'Ban Members': f'{member.guild_permissions.ban_members}',\n                    'Kick members': f'{member.guild_permissions.kick_members}'}\n
Run Code Online (Sandbox Code Playgroud)\n

此时这将返回类似:

\n
{'Administrator': 'True', 'Ban Members': 'True', 'Kick members': 'True'}\n
Run Code Online (Sandbox Code Playgroud)\n

或者 false 如果用户没有这些权限,我的目标是能够过滤具有 True 值的键,所以如果用户只有 x/3 权限(字典会更大,但我不希望继续进行,除非我能够解决我的问题),仅显示具有 True 值的密钥,如果用户在字典中没有任何权限,它将返回任何内容或字符串 ex,You have no moderation roles to dispaly并且如果存在某些权限只需通过按键等即可显示它们Administrator, Kick members。。我没有太多地使用字典中的布尔值,所以我希望我能在这里找到解决方案。

\n

我还尝试将它与.join

\n
 permdict = {'Administrator': f'{member.guild_permissions.administrator}',\n                    'Ban Members': f'{member.guild_permissions.ban_members}',\n                    'Kick members': f'{member.guild_permissions.kick_members}'}\n\n permf = ", ".join(permdict) \xe2\x80\x8b\n
Run Code Online (Sandbox Code Playgroud)\n

结果就是我想要的

\n
Administrator, Ban Members, Kick members \xe2\x80\x8b\n
Run Code Online (Sandbox Code Playgroud)\n

但问题是,即使用户没有这些权限,它们仍然会显示。我觉得我已经很接近找到解决方案了,但我无法弄清楚

\n

Bar*_*mar 5

使用具有条件的生成器:

permf = ", ".join(key for key, value in permdict.items() if value == "True")
Run Code Online (Sandbox Code Playgroud)

如果您更改permdict为包含布尔值而不是字符串,则可以稍微简化一些事情。

permdict = {
    'Administrator': {member.guild_permissions.administrator,
    'Ban Members': member.guild_permissions.ban_members,
    'Kick members': member.guild_permissions.kick_members
}
permf = ", ".join(key for key, value in permdict.items() if value)
Run Code Online (Sandbox Code Playgroud)