2016-03-05 2 views
1

J'essaie de vérifier si une liste contient une clé.Vérifier si une liste contient une clé

J'ai un dictionnaire que j'ai trié et je crois qu'il le transforme en une liste. Maintenant, je veux vérifier cette liste pour une clé.

Voici mon code pour donner une idée où je suis:

drinkDict = {'drink1': drinkTimes[0],'drink2': drinkTimes[1],'drink3': drinkTimes[2],'drink4': drinkTimes[3],'drink5': drinkTimes[4]}; 
    print drinkDict 
    for k, v in drinkDict.items(): 
     if v == '0': 
      del drinkDict[k] 
    sorted_x = sorted(drinkDict.items(), key=operator.itemgetter(1)) 
    print sorted_x 
    print (sorted_x[0] 
    if 'drink1' in sorted_x.key: 
     print "drink1 is present" 
     data = pin_update(VALID_BCM_PIN_NUMBERS[0], 0) 

Sortie:

{'drink4': u'4.8', 'drink5': u'0.7', 'drink1': u'1.4', 'drink2': u'2.8', 'drink3': u'0'} 
[('drink5', u'0.7'), ('drink1', u'1.4'), ('drink2', u'2.8'), ('drink4', u'4.8')] 
('drink5', u'0.7') 

Je ne peux pas comprendre comment détecter si sorted_x contient " drink1 "ou" drink2 "etc. etc.

Je ne suis pas sûr sur la terminologie ici alors s'il vous plaît corrigez-moi si je suis wr Je peux donc mieux chercher des solutions.

+1

Quel est le point de conversion à une liste et à un tri? La recherche est beaucoup plus facile si vous le gardez comme dict. –

Répondre

1

Vous pouvez réutiliser operator.itemgetter de plus tôt, sauf que nous regardons la première entrée (0e) cette fois-ci:

'drink1' in map(operator.itemgetter(0), sorted_x) # True 

Cependant, vous voudrez peut-être expliquer pourquoi vous faites tout cela. Il semble que vous dansiez autour de différentes structures de données et je ne sais pas pour quelle raison.

Pour trier les éléments dans le dictionnaire de la deuxième valeur:

sortedItems = sorted(drinkDict.items(), key=operator.itemgetter(1)) 

En général, il semble que vous pourriez réaliser la même chose en utilisant le code comme:

import operator 

drinkDict = {'drink1': '2', 
      'drink2': '1', 
      'drink3': '4', 
      'drink4': '3', 
      'drink5': '0' 
      } 

# removes 'drink5': '0' 
filteredDict = {k: v for k, v in drinkDict.items() if v != '0'} 

# [('drink2', '1'), ('drink1', '2'), ('drink4', '3'), ('drink3', '4')] 
sortedItems = sorted(filteredDict.items(), key=operator.itemgetter(1)) 
+0

J'essaie d'obtenir plus que la valeur min. J'ai besoin de savoir quel est le prochain plus petit et ainsi de suite pour les 5 boissons – BluGeni

+0

@BluGeni mis à jour en conséquence –

+0

Est-ce que sortedItems un dictionnaire? – BluGeni

0

Vous avez imprimé le premier élément de sorted_x, et vous pouvez voir qu'il s'agit d'un tuple, pas d'une chaîne. Vérifier si la chaîne 'drink_1' est dans sorted_x ne marchera jamais.

Comme Daniel a noté dans le commentaire, vous ne voulez probablement pas travailler avec une liste triée des tuples, il est beaucoup plus facile de faire des recherches sur le dict vous:

if 'drink1' in drinkDict: 
    ... 

Notez également que vous triez sur les valeurs, qui sont des chaînes et non des nombres. Cela signifie que vous les trier par ordre alphabétique et non numérique. Vous pourriez vouloir ajuster la clé de tri pour les convertir en flottant, ou simplement les stocker comme des flotteurs pour commencer.

+0

comment puis-je savoir quelle valeur du dictionnaire est la plus petite? – BluGeni

+0

@BluGeni Est-ce votre objectif? –