J'ai une sorte de logique verbeuse que j'aimerais compacter avec certaines compréhensions.
Essentiellement, j'ai un objet dict que je lis à partir de laquelle il y a 16 valeurs que je suis concerné avec . Je reçois les clés que je veux avec la compréhension suivante: p> Le type de dictionnaire source ressemble à ceci: p> J'aimerais bien cartographier ce dictionnaire pour être quelque chose comme ceci: p> Comment mapper les choses avec la liste et les compromies de dictionnaire pour transformer ma source de dicte Liste de destination des dictionnaires? P> p>
3 Réponses :
Ceci est une solution entièrement fonctionnelle pouvant être appliquée sur la taille arbitraire.
In [1]: d = {'I0': [0, 1, 5, 2], 'I1': [1, 3, 5, 2], 'I2': [5, 9, 10, 1]}
In [2]: map(lambda (k, v): map(lambda vv: (k, vv), v), _.iteritems())
Out[2]:
[[('I1', 1), ('I1', 3), ('I1', 5), ('I1', 2)],
[('I0', 0), ('I0', 1), ('I0', 5), ('I0', 2)],
[('I2', 5), ('I2', 9), ('I2', 10), ('I2', 1)]]
In [3]: zip(*_)
Out[3]:
[(('I1', 1), ('I0', 0), ('I2', 5)),
(('I1', 3), ('I0', 1), ('I2', 9)),
(('I1', 5), ('I0', 5), ('I2', 10)),
(('I1', 2), ('I0', 2), ('I2', 1))]
In [4]: map(dict, _)
Out[4]:
[{'I0': 0, 'I1': 1, 'I2': 5},
{'I0': 1, 'I1': 3, 'I2': 9},
{'I0': 5, 'I1': 5, 'I2': 10},
{'I0': 2, 'I1': 2, 'I2': 1}]
Comment je le résoudrais:
Premièrement, je voudrais obtenir chaque clé une liste contenant des tuples, où le premier élément serait la clé et la seconde serait l'une des valeurs de la liste: P > puis je transmerais cette liste, créant une liste de tuples contenant chaque clé correspondante, à l'aide de la fonction ZIP: p> >>> pairs = [ [ (k, i) for i in l] for k, l in d.items() ]
>>> transversed = zip(*pairs)
>>> ds = [dict(t) for t in transversed]
>>> pprint(ds)
[{'I0': 0, 'I1': 1, 'I2': 5},
{'I0': 1, 'I1': 3, 'I2': 9},
{'I0': 5, 'I1': 5, 'I2': 10},
{'I0': 2, 'I1': 2, 'I2': 1}]
+1 pour l'élaboration étape par étape. Nos approches sont les mêmes sauf que j'ai effectué une utilisation intensive de carte code> :)
@qiao Oui, nous avons adopté la même approche de manière plus abstraite. J'ai juste une certaine préférence pour les compréhensions de la liste, mais votre solution est excellente.
Il existe une solution courte et facile: La clé ici est la transposition de la matrice de transposition de valeurs, qui est effectuée avec zip (* valeurs) code>, puis nous venons de reconstruire dicts. p> p>