2011-09-04 4 views
2

J'ai un dictionnaire item. Il a des cordes que les clés et les valeurs sont des listes, par exemple:Comparer les valeurs du dictionnaire et la clé en python

item['title'] = [u'python'] 
item['image'] = [u'/link/to/image'] 
item['link'] = [u'link to article'] 

Je veux vérifier si une valeur est 0 en longueur, mais le lien ou l'image peut être vide, donc je ne les suivantes:

 for key, value in item.iteritems(): 
      if len(value) == 0: 
       if key != 'image' or key != 'link': 
        raise DropItem("Item is empty: %s" %item)     
     return item 

Donc un élément doit être supprimé uniquement si la valeur est 0 et ce n'est pas une image ou une clé. Mon problème est maintenant que cette condition ne fonctionne pas. L'élément est toujours supprimé lorsque l'image ou le lien est vide.

Une idée de ce qui ne va pas? (Je suis nouveau à python ^^)

+1

Notez que l'idiome pour le contrôle d'une collection vide (liste, dict, ensemble, chaîne, etc.) est 'sinon xs:' (et inversement, de vérifier si elle est non vide est 'si xs:'). – delnan

Répondre

5

Vous avez confondu le or logique avec and. Par exemple, si la clé est "image", vous vérifiez les éléments suivants:

if "image" != 'image' or "image" != 'link': 
#if  False  or  True: 
#if True: 

Au lieu de cela, vous voulez

if key != 'image' and key != 'link': 

ou, plus facile à lire:

if key not in ('image', 'link'): 
+1

ou _harder_ pour lire si l'image '! = Key! =' Link'' :) –

4

Vous devez:

if key != 'image' and key != 'link': 

parce que

if key != 'image' or key != 'link': 

est toujours vrai

Questions connexes