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 J'ai également essayé A pour la boucle avec liens de liaison et DICT2, comme ceci: p> obtenir code> et
définir code> et ne réussissez pas. 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'
3 Réponses :
Vous vouliez probablement utiliser [P> Aussi les entrées de votre dictionnaire contiennent des valeurs simples (non des listes) afin que vous puissiez utiliser Le par exemple: p> ou: p> Si vous avez beaucoup de code à effectuer sur les données "jointes", vous pouvez structurer la condition comme ceci: p> si vous recherchez seulement un Somme, vous pouvez le faire plus directement: P> dict [k] code> au lieu de
dict2 [valeur] code>
dans code> opérateur: 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)
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 code> et valeurs code> pour obtenir une liste des touches / valeurs de ce dictionnaire, vous pouvez utiliser le symbole
+ code> pour rejoindre ce tableau avec un autre tableau.
Cela vient d'imprimer simplement ['B', 'A'] code>
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).
Vous pouvez utiliser une compréhension de liste:
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. maintenant maintenant aussi loin que je n'ai pas fait la question que vous souhaitez obtenir la somme des clés dans si une touche n'apparaît pas dans le dictionnaire Il reçoit une valeur par défaut de pour obtenir la somme est facile maintenant maintenant p> lookup code> est
{'A': 1, 'B': 2, 'c': 3} code>.
Maintenant, vous pouvez faire boucle sur la liste: p>
résultat code> est
['A', 'B', 'A'] < / code>. Le code sera plus court avec une compréhension de la liste: p>
dict2 code> Pour chaque entrée dans
listy code> qui a une valeur correspondante dans
dict2 code>. Si vous avez créé le dictionnaire code> code>, vous pouvez procéder comme suit pour obtenir les valeurs simples. P>
0 code>. p>
Merci! Je l'avais ainsi la première fois et je vais le retourner volontiers.
Quelle est l'attente de production?
Je m'attendrais à ce que la sortie soit une