J'utilise session dans mon application Django.
request.session ['permissions'] est structuré de la manière suivante. La clé est la même pour toutes les valeurs. En gros, c'est une liste de dictionnaires
permissions = request.session['permissions']
if value not in permissions:
print('Value is inside list')
'list' object has no attribute 'mykey'
Maintenant, je veux vérifier si value4 code > est présent dans les permissions . Je ne sais pas comment vérifier la valeur.
Chaque fois que j'essaie d'accéder à une valeur comme celle-ci
permissions.mykey
Cela me donne une erreur
permissions = request.session['permissions']
Je veux faire la même chose comme ça
[{'mykey': 'value1'}, {'mykey': 'value2'}, {'mykey': 'value3'},
{'mykey': 'value4'}, {'mykey': 'value5'}, {'mykey': 'value6'}]
4 Réponses :
utilisez une boucle for pour obtenir le dictionnaire unique, puis vérifiez la clé
for perm in permissions:
if value in perm.values():
print('Value is inside list')
Je pense que vous pouvez le faire comme ceci en utilisant filtre :
permissions = request.session['permissions']
exists = list(filter(lambda x: x.get('mykey') == 'value4', permissions)) # for python 3
# for python2
# exists = filter(lambda x: x.get('mykey') == 'value4', permissions)
if len(exists) > 0:
print('value4 exists')
value_to_check = some_value
permissions = request.session['permissions']
for perm in permissions:
for key in perm:
if perm[key] == value_to_check:
print "Value is present"
Comme le soulignent les autres réponses. Le problème est que vous essayez d'utiliser un accesseur de dictionnaire sur un objet de liste. Puisque permissions est une liste de dictionnaires, vous devez vérifier tous les dictionnaires de la liste pour la value4 . Cela peut être fait de plusieurs façons, dans mon esprit, la manière la plus pythonique serait d'utiliser la compréhension de liste, quelque chose comme [value4 == d for d ['mykey'] in permissions]