11
votes

Trouver tous les éléments clés par la même valeur dans les dicts

J'ai des questions sur les dictionnaires à Python.

ici c'est:

J'ai un dict comme dict = {'ABC': 'A', 'CDF': 'B', 'GH': 'A', 'FH': 'G', 'HFZ': 'g'}

Maintenant, je veux obtenir tous les éléments clés de la même valeur et l'enregistrer dans un nouveau dict.

Le nouveau dict devrait être ressemblant à:

new_dict = {'B' :( 'CDF'), 'A' :( 'ABC', 'GH'), 'G' :( 'FH', 'HFZ')}


1 commentaires

N'utilisez pas «dict» comme nom de variable, car il s'agit du nom d'une fonction intégrée.


4 Réponses :


22
votes

Si vous allez bien avec des listes au lieu de tuples dans le nouveau dictionnaire, vous pouvez utiliser

new_dict = {}
for k, v in some_dict.iteritems():
    new_dict.setdefault(v, []).append(k)


0 commentaires

5
votes

Voici une implémentation naïve. Quelqu'un avec de meilleures compétences en python peut probablement le rendre plus concis et génial. XXX PRE>

Ceci produit P>

{'a': ['abc', 'gh'], 'b': ['cdf'], 'g': ['fh', 'hfz']}


0 commentaires

0
votes

Si vous voulez spécifiquement des tuples comme les valeurs de votre nouveau dictionnaire, vous pouvez toujours utiliser defaultDict et utiliser la concaténation de tuple. Cette solution fonctionne dans Python 3.4 +:

target2 = defaultdict(list)

for key in source:
    target2[source[key]].append(key)

for key in target2:
    target2[key] = tuple(target2[key])

print(target2)


0 commentaires

0
votes

Cela peut être fait de cette façon aussi, sans utiliser de fonctions supplémentaires.

some_dict = { 'abc':'a', 'cdf':'b', 'gh':'a', 'fh':'g', 'hfz':'g' }
new_dict = { }
for keys in some_dict:
    new_dict[some_dict[keys]] = [ ]
for keys in some_dict:
    new_dict[some_dict[keys]].append(keys)
    
print(new_dict)


0 commentaires