2
votes

Python: faire correspondre les éléments de la liste

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,
    ...
}


3 commentaires

beau, comme dans zipping ? ;)


vous pouvez importer le module csv et 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


5 Réponses :


2
votes

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'}


1 commentaires

vous pouvez omettre la ligne 3 et réécrire la ligne 4 comme result = [{u: v} pour u, v dans zip (* [iter (data)] * 2)]



2
votes

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)}


0 commentaires

5
votes
{'value1': '346.897', 'value2': '202.306', 'value3': '136.880', 'value4': '7.711'}

5 commentaires

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!



1
votes

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)


0 commentaires

1
votes

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 >


0 commentaires