J'ai une liste de tuples comme: Le troisième élément de tous les tuples sont les mêmes. J'essaie de convertir cette liste en un dictionnaire de la manière suivante: p> update: strong> p> à partir de maintenant je Je le fais manuellement mais j'ai environ 1000 tuples dans une liste avec le même horodatage, mais parfois, j'ai aussi différents horodatages. J'essaie d'automatiser ce processus en écrivant une fonction car je dois réutiliser le code à nouveau et à nouveau pour une liste multiples de tuples pour créer une liste de dictionnaires, mais je ne sais pas comment aborder ce problème. Toute aide serait appréciée? P> [{'timestamp': '20190208011713-0500',
'a' : 76,
'b' : 14,
'c' : 99,
'd' : 62,
'e' : 112,
'f' : 78,
'g' : 20,
'h' : 14,
'i' : 23},
{'timestamp': '20190208011803-0500',
'a' : 45,
'b' : 36,
'c' : 22,
'd' : 69,
'e' : 11,
'f' : 118,
'g' : 29,
'h' : 34,
'i' : 63}]
4 Réponses :
Si l'horodatage est garanti d'être identiques ou que vous ne vous souciez pas si ce n'est pas le cas, il suffit d'utiliser:
groups = {}
for key, value, ts in your_list:
if ts not in groups:
groups[ts] = {'timestamp': ts}
groups[ts][key] = value
result = sorted(groups.values(), key=itemgetter('timestamp'))
Le code ci-dessus fonctionne bien, mais uniquement pour le même horodatage non pour différents horodatages.
@akashbachu: C'est pourquoi la réponse commence par si l'horodatage est garanti d'être identiques, i>
@akashbachu: Les horodats sont-ils groupés i> au moins? Ou faire peut-ils apparaître dans n'importe quel ordre?
Ils apparaissent dans un ordre aléatoire.
@akashbachu: À droite, j'ai donné des options pour quand ils sont regroupés et quand ils ne le sont pas.
Comptabilisation du changement d'horodatage:
{'20190208011713-0500': {'a': '76',
'b': '14',
'c': '99',
'd': '62',
'e': '112',
'f': '78',
'g': '20',
'h': '14',
'i': '23'}}
tups = [('a', '76', '20190208011713-0500'),
('b', '14', '20190208011713-0500'),
('c', '99', '20190208011713-0500'),
('d', '62', '20190208011713-0500'),
('e', '112', '20190208011713-0500'),
('f', '78', '20190208011713-0500'),
('g', '20', '20190208011713-0500'),
('h', '14', '20190208011713-0500'),
('i', '23', '20190208011713-0500')]
def to_dict(tups):
my_dict = {element[0]: element[1] for element in tups}
my_dict['timestamp'] = tups[-1][2]
return my_dict
m_d = to_dict(tups)
print(m_d)
Je pense que la manière la plus simple est la suivante:
Note latérale: Python 2.7 va arriver à la fin de la vie dans 10 mois de temps . S'il s'agit d'un nouveau projet, vous devriez vraiment construire cela dans Python 3. Ma réponse ci-dessous est entièrement compatible avec Python 2 et 3, vous pouvez donc le prendre avec vous.
Merci @martijn je garderai ça à l'esprit. Oui, j'utilise Python 2.7 pour ce projet et vous avez dit que je mènerai mon code vers Python3 de Python2. Et votre solution fonctionne :)