0
votes

Comment vérifier si un objet est sur les touches ou dans les valeurs d'un dictionnaire?

J'essaie de comprendre quel est le moyen le plus simple de vérifier si un objet est dans les clés d'un dictionnaire ou dans les valeurs d'un dictionnaire. J'ai essayé d'utiliser .items () code> mais sans résultats.

Maintenant, j'utilise cette solution mais je me demande s'il y a une meilleure solution: p>

zdict = { 'a':1,'b':2,'c':3}
print(list(zdict.values()) + list(zdict.keys()))
'b' in list(zdict.values()) + list(zdict.keys())


1 commentaires

si quoi que ce soit dans zdict ou quoi que ce soit dans zdict.values ​​() ???


4 Réponses :


1
votes

Je ne dirais pas que ceci est plus simple mais peut-être: xxx


0 commentaires

1
votes
from itertools import chain
"b" in chain(*zdict.items())

3 commentaires

Cela rend l'algorithme entier le temps quadratique. jamais Utiliser somme pour aplatir une séquence. De plus, cela ne profite pas du temps constant vérifiant les clés.


@ Juanpa.arrivillaga, merci pour l'avertissement! J'ai ajouté une version linéaire, je suppose. Mais il manque toujours le O (1) de la recherche clé, bien sûr.


Remarque, chaîne (* zdict.items ()) peut être chaîne.from_itérable (zdict.items ()) , qui est légèrement plus efficace, car * < / Code> Le déballage crée un tuple



4
votes

Arrêtez induistablement les objets des vues renvoyées par .Keys et .values ​​. Pour vérifier si un objet est une clé de dictionnaire, vous utilisez simplement quelque_Object dans certains_dict , pour vérifier si c'est dans les valeurs, vous utilisez quelque_Object dans certains_dict.values ​​() , donc combiner à la fois les deux: xxx

Ceci va fondamentalement être une opération linéaire, mais la vérification si elle se trouve dans les clés est constante, c'est une recherche de hachage, vous devriez donc vérifier que d'abord tirer parti du comportement à court-circuit. Remarque, si vous faites une liste hors des touches, vous force une recherche linéaire.


1 commentaires

Oui, vous avez raison, j'ai fait la liste parce que j'avais besoin pour plus tard utilisé. J'aurais dû écrire la question différemment



0
votes

Ce n'est pas très différent des autres mais une syntaxe assez différente: xxx


0 commentaires