虽然这段代码对我有用,但我想知道是否有更好的" Pythonic "在Django会话中检查密钥的方法?
if 'a' \
and 'b' \
and 'c' \
and 'd' \
and 'e' \
and 'f' \
in request.session:
#do something
基本上,我需要确保我的会话中存在所有这些值。
答案 0 :(得分:5)
使用all
内置
if all(key in request.session for key in ['a', 'b', ...]):
...
答案 1 :(得分:1)
其他答案中给出的all
成语很好,可能是2.x的最佳答案。
如果您使用的是Python 3.x,则替代session.keys()
将是支持集合操作的dictview对象。因此,如果您所需的密钥集是静态的,则可以创建frozenset
,然后针对session.keys()
检查设置差异:
required_keys = frozenset(('a','b','c','d','e','f'))
missing_required_keys = required_keys - session.keys()
if missing_keys:
# at least one key is missing
MariusSiuram在评论中指出,issubset
操作比设置差异更有效,如果您不需要missing_keys
集:
if required_keys <= session.keys():
# do something
else:
# at least one key is not in the session
如果密钥列表不是静态的,那么与all
相比,我没有进行过分析。
答案 2 :(得分:1)
接受解决方案的另一种变体:
if [key for key in ['a', 'b', ...] if key not in request.session ]:
...
它起作用,因为空列表的计算结果为False
,如果它有多个元素,则计算结果为True
。
编辑以前的版本是错误的。