my_dict = {0:['m1094', 'm75'...],1:['m3','m122'],so on....}
3 Réponses :
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']}
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')]
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)
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.
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']}
Quelle est la sortie attendue, pouvez-vous ajouter des échantillons?
Non, c'est une question complètement différente.