web-dev-qa-db-fra.com

Sélection d'éléments d'un dictionnaire Python supérieurs à une certaine valeur

Je dois sélectionner des éléments d'un dictionnaire d'une certaine valeur ou plus. Je sais comment faire cela avec des listes, Retourne la liste des éléments de la liste supérieurs à une valeur.

Mais je ne suis pas sûr de savoir comment traduire cela en quelque chose de fonctionnel pour un dictionnaire. J'ai réussi à obtenir les balises qui correspondent (je pense) à des valeurs supérieures ou égales à un nombre, mais l'utilisation de ce qui suit donne uniquement les balises:

[i for i in dict if dict.values() >= x]
18
Jesse O

.items() renverra des paires (key, value) que vous pourrez utiliser pour reconstruire une dict filtrée à l'aide d'une compréhension list alimentée dans le constructeur dict() , qui acceptera une valeur itérable de (key, value) tuples aka. notre compréhension de la liste:

>>> d = dict(a=1, b=10, c=30, d=2)
>>> d
{'a': 1, 'c': 30, 'b': 10, 'd': 2}
>>> d = dict((k, v) for k, v in d.items() if v >= 10)
>>> d
{'c': 30, 'b': 10}

Si vous ne vous souciez pas d'exécuter votre code sur une version de python antérieure à la version 2.7, consultez la réponse @opatut à l'aide de "dict comprehensions" :

{k:v for (k,v) in dict.items() if v > something}
25
nmaier

Si la solution de nmaier aurait été ma solution, notez que depuis Python 2.7+, il existe une syntaxe " dict comprehension ":

{k:v for (k,v) in dict.items() if v > something}

Trouvé ici: Créer un dictionnaire avec une compréhension de liste en Python . J'ai trouvé ceci en recherchant "la compréhension de la liste de dictionnaires python" dans le top post.

Explication

  • { .... } inclut la compréhension du dict
  • k:v quels éléments ajouter au dict
  • for (k,v) in dict.items() this itère sur tous les n-uplets (paires clé-valeur) du dict
  • if v > something une condition qui doit s'appliquer à chaque valeur à inclure
9
opatut

Vous voulez dict[i] pas dict.values(). dict.values() renverra la liste complète des valeurs figurant dans le dictionnaire.

dict = {2:5, 6:2}
x = 4
print [dict[i] for i in dict if dict[i] >= x] # prints [5]
1
Shashank