Après l'analyse du fichier csv, j'obtiens cette liste à partir de l'une des lignes:
Variables :value1 # ... - are dynamic
en conséquence, je dois obtenir:
{
'value1': 346.897,
'value2': 202.306,
...
}
5 Réponses :
Vous pouvez supprimer les éléments vides de la liste, diviser les éléments en morceaux de 2, puis utiliser une compréhension de dict.
Ex:
{'value1': '346.897',
'value2': '202.306',
'value3': '136.880',
'value4': '7.711'}
vous pouvez omettre la ligne 3 et réécrire la ligne 4 comme result = [{u: v} pour u, v dans zip (* [iter (data)] * 2)]
Une façon de le faire est d'abord de se débarrasser des chaînes vides, puis de les convertir en dictionnaire, sachant que vous devez faire un pas de 2 sur l'index pour passer d'une paire (clé, valeur) à le suivant:
Out[8]:
{'value1': '346.897',
'value2': '202.306',
'value3': '136.880',
'value4': '7.711'}
Sortie:
L = ['', 'value1', '346.897', '', 'value2', '202.306', 'value3', '136.880', 'value4', '7.711', '']
L = [elt for elt in L if elt != '']
D = {L[k]:L[k+1] for k in range(0, len(L), 2)}
{'value1': '346.897', 'value2': '202.306', 'value3': '136.880', 'value4': '7.711'}
Comment fonctionne la version plus courte? Pourquoi n'inclut-il pas les paires clé-valeur de commutation, comme: '346.897': 'value2' ?
@Lucas Oui, zip () attend des itérables, à condition que les s avec la liste complète et les s [1:] avec la liste sautant le premier elem, la conversion en dict supprime les clés en double: programiz.com/python -programmation / méthodes / intégré / zip
Je vois, mais je viens de l'exécuter et le dict contiendra toujours les valeurs réelles des clés, après tout cela peut être attendu, car il ne s'agit pas de doublons.
@Lucas sur quelle version de Python êtes-vous? Il semble que cela cassait sur 2.x, mais la version modifiée devrait fonctionner correctement maintenant. à votre santé
Eh bien, j'étais sur python 2.7, mais en effet, maintenant cela devrait fonctionner!
Vous pouvez essayer quelque chose comme ceci:
{'value1': '346.897', 'value2': '202.306', 'value3': '136.880', 'value4': '7.711'}
Sortie:
input_list = ['', 'value1', '346.897', '', 'value2', '202.306', 'value3', '136.880', 'value4', '7.711', ''] # Filtering for empty strings res = [item for item in input_list if item != ""] # Making pairs of list items pairs = zip(res[::2], res[1::2]) res_dict = dict(pairs) print (res_dict)
Si vous êtes sûr de la paire clé adjacente, valeur dans la liste. Vous pouvez simplement créer un itérateur à partir de cette liste et en faire un dict comme,
>>> data
['', 'value1', '346.897', '', 'value2', '202.306', 'value3', '136.880', 'value4', '7.711', '']
>>> data_ = [x for x in data if x] # clean the data
>>> d = iter(data_) # make an iterator
>>> {x: next(d) for x in d}
{'value4': '7.711', 'value3': '136.880', 'value2': '202.306', 'value1': '346.897'}
p >
beau, comme dans
zipping? ;)vous pouvez importer le module
csvet l'utiliser simplement pour l'analyse. le résultat que vous souhaitez obtenir peut facilement être généré comme ça.@ Ev.Kounis J'ai vraiment mauvais csv. Toutes les lignes très différentes