1
votes

Meilleur moyen d'ajouter des valeurs de deux tableaux dans un seul dictionnaire python

my_dict = {0:['m1094',  'm75'...],1:['m3','m122'],so on....}

2 commentaires

Quelle est la sortie attendue, pouvez-vous ajouter des échantillons?


Non, c'est une question complètement différente.


3 Réponses :


1
votes
  1. Vous pouvez d'abord jumeler les deux listes

    from itertools import groupby
    from operator import itemgetter
    
    res = {clu: [v[1] for v in vals] for clu, vals in groupby(sorted(pairs, key=itemgetter(0)), key=itemgetter(0))}
    print(res) # {0: ['m1094', 'm75'], 499: ['m1272']}
    
  2. Puis groupby par premier élément de chacun, et conserver le deuxième élément dans les listes résultantes

    pairs = zip(n_cluster, nodes) # [(0, 'm1094'), (0, 'm75'),..., (499, 'm1272')]
    

0 commentaires

3
votes

Utilisation de setdefault

Data

from pprint import pprint as pp
pp(my_dict)


{0: ['m74', 'm75'],
 1: ['m76'],
 2: ['m77', 'm78'],
 3: ['m79', 'm80', 'm81'],
 4: ['m82']}

Code

my_dict = {}
for cluster, node in zip(n_cluster, nodes):
  my_dict.setdefault(cluster, []).append(node)


3 commentaires

Setdefault est-il une fonction intégrée d'un dictionnaire en python?


@SahilKamboj, oui. Une option plus flexible est fournie par defaultdict où vous pouvez avoir par défaut int , float , ..


@ Austin- comparaison entre setdefault, get et defaultdict Il semble que setdefault soit plus flexible dans la mesure où la valeur par défaut peut varier selon la clé. Cependant, il introduit une ligne de code supplémentaire sauf dans le cas d'ajout tel qu'utilisé ici.



1
votes

Une bonne option consiste à utiliser defaultdict et à parcourir les valeurs compressées:

from collections import defaultdict

n_cluster = [0,0,499]
nodes =   ['m1094', 'm75', 'm1272']

d = defaultdict(list)
for x, y in zip(n_cluster, nodes):
    d[x].append(y)

print(d) 
# {0: ['m1094', 'm75'], 499: ['m1272']}


0 commentaires