0
votes

Comment rejoindre une liste de valeurs dans un dictionnaire Python?

J'essaie de rejoindre une liste dans un dictionnaire à Python 3 et de renvoyer la somme des valeurs de clé.

Jusqu'à présent, je ne peux pas rejoindre les deux, j'ai essayé d'utiliser obtenir code> et définir code> et ne réussissez pas. p>

J'ai également essayé A pour la boucle avec liens de liaison et DICT2, comme ceci: p>

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-291-5a5e2eb8d7f8> in <module>
     10 
     11 for k in dict2:
---> 12     if set(listy) & set(dict2[value]):
     13         print(dict2.key)
     14 

TypeError: unhashable type: 'list'


2 commentaires

Quelle est l'attente de production?


Je m'attendrais à ce que la sortie soit une


3 Réponses :


0
votes

Vous vouliez probablement utiliser dict [k] code> au lieu de dict2 [valeur] code>

[P> Aussi les entrées de votre dictionnaire contiennent des valeurs simples (non des listes) afin que vous puissiez utiliser Le dans code> opérateur: p>

par exemple: p> xxx pré>

ou: p> xxx pré>

Si vous avez beaucoup de code à effectuer sur les données "jointes", vous pouvez structurer la condition comme ceci: p> xxx pré>

si vous recherchez seulement un Somme, vous pouvez le faire plus directement: P>

# counting sum of dict2 keys matching each value in listy  
# select sum(dict2.key) from listy join dict2 where dict2.value = listy.value
# (note that an inverted dict2 would be better suited for that)

result = sum(key*listy.count(value) for key,value in dict2.items())

# counting sum of keys in dict2 that have a value in listy 
# select sum(dict2.key) from dict2 where exists listy.value = dict2.value

result = sum(key for key,value in dict2.items() if value in listy)


5 commentaires

Merci! Pour l'avenir, est la meilleure façon de "rejoindre" dans un dictionnaire - avec une déclaration "dans"? Je suis tellement habitué à rejoindre des tables dans SQL Cela se sent inefficace.


Vous pouvez utiliser les touches et valeurs pour obtenir une liste des touches / valeurs de ce dictionnaire, vous pouvez utiliser le symbole + pour rejoindre ce tableau avec un autre tableau.


Cela vient d'imprimer simplement ['B', 'A']


Lorsque vous travaillez en mémoire, les contraintes d'E / S des bases de données ne s'appliquent pas. L'accès à la mémoire directe est essentiellement gratuit, par opposition aux coûts de requête impliqués par des jointures dans SQL. C'est une façon différente de penser à la performance.


Modifié le code SET & SET qui renvoyait des valeurs au lieu de clés (mon mauvais).



3
votes

Vous pouvez utiliser une compréhension de liste: xxx

en code : xxx


0 commentaires

0
votes

Votre tâche sera plus facile si vous retournez les clés et les valeurs de votre dictionnaire. Je suppose qu'il n'y a pas de valeurs en double. xxx

maintenant lookup est {'A': 1, 'B': 2, 'c': 3} . Maintenant, vous pouvez faire boucle sur la liste: xxx

maintenant résultat est ['A', 'B', 'A'] < / code>. Le code sera plus court avec une compréhension de la liste: xxx

aussi loin que je n'ai pas fait la question que vous souhaitez obtenir la somme des clés dans dict2 Pour chaque entrée dans listy qui a une valeur correspondante dans dict2 . Si vous avez créé le dictionnaire , vous pouvez procéder comme suit pour obtenir les valeurs simples. xxx

si une touche n'apparaît pas dans le dictionnaire Il reçoit une valeur par défaut de 0 .

pour obtenir la somme est facile maintenant maintenant xxx


1 commentaires

Merci! Je l'avais ainsi la première fois et je vais le retourner volontiers.