2011-03-02 3 views
1
results=[key for key, value in adictionary if str(key).startswith('target') 
    and value > 0 ] 

Qu'est-ce que j'essaie de faire ici est de sélectionner toutes les clés si la clé dans le dictionnaire que beginswith cible et sa valeur est supérieure à 0. Mais regarde, il y a un problème avec cela, aidez-moi ~syntaxe de liste Python aide

Répondre

3
results=[key for key, value in adictionary.items() if str(key).startswith('target') 
      and value > 0 ] 
0

Vous devez utiliser la méthode items() pour obtenir la clé et la valeur.

[key for key, value in adictionary.items() if str(key).startswith('target') and value > 0] 
0

J'utilise la méthode iteritems() du dictionnaire. Il renvoie un interateur plutôt que de générer une liste complète comme le fait la méthode items().

results = [key for key, value in adictionary.iteritems() if str(key).startswith('target') and value > 0]

+0

Il est à la recherche de la clé qui commence par 'cible' et la valeur supérieure à 0 ... – Rod

+0

@Rod ouais raté ça, j'utiliserais quand même la version iter. – William

2

manquant items() IOR iteritems() à votre accès dict. iteritems ne créera pas de liste temporaire qui pourrait être légèrement plus rapide.

results=[key for key, value in adictionary.iteritems() if str(key).startswith('target') 
      and value > 0 ] 
0

startswith() est plus lent que le tranchage

je ferais:

results=[k for k,v in adictionary.iteritems() 
     if (k[0:7]=='target')==True==(v>0)]