1
votes

Comment vérifier si une valeur est présente dans une liste de dictionnaires?

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'}]


0 commentaires

4 Réponses :


3
votes

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')


0 commentaires

2
votes

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')


0 commentaires

0
votes
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"

0 commentaires

0
votes

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]


0 commentaires