essayant de comprendre comment faire cela et n'ont pas encore trouvé de bonne solution. J'ai extrait ces données d'une réponse XML. C'était dans une balise var. Maintenant, ce que j'aimerais faire, c'est en créer un dictionnaire. Le domaine.com doit être associé au numéro figurant juste derrière.
Voici les données:
import ast
i = iter(ast.literal_eval(data))
dic = dict(zip(i, i))
for key , value in dic.items():
print(key, " :: ", value)
Par exemple, cb131.domain1.com devrait être associé à 147827, cb143.domain2.com associé à 147825 et ainsi de suite.
Dessiner un blanc sur une bonne solution rapide sur la façon de faire cela. J'espère que quelqu'un pourra vous aider.
Merci!
Modifié avec la réponse que je choisis ci-dessous:
Je choisis cette réponse et aussi pour aider quelqu'un d'autre j'ajoute une belle manière pour imprimer les résultats (les données sont la chaîne que j'ai obtenue):
[
'cb131.domain1.com', '147827',
'cb143.domain2.com', '147825',
'cb175.domain1.com', '147454',
'cb190.domain.com', '146210',
'cb201.domain.com', '146208',
'cb219.domain.com', '146042',
'cb225.domain.com', '146282',
'cb900.domain.com', '148461',
'cb901.domain.com', '148493',
'cb902.domain.com', '148495',
'cb903.domain.com', '148497',
'cb904.domain.com','148499',
'cb905.domain.com', '148501',
'cb906.domain.com', '148503',
'cb907.domain.com', '148505',
'cb908.domain.com', '148507',
'cb909.domain.com', '148509'
]
4 Réponses :
Je ne connais pas encore Python que je peux écrire un extrait, mais:
Cette réponse vous aide-t-elle?
Voici Python - rapidement sur Google:
dictionary = { }
for idx in range(0, len(data), 2)
dictionary[data[idx]] = data[idx + 1]
Cela devrait le faire. En supposant que la liste est enregistrée dans une variable l:
keys = l[::2] vals = l[1::2] dic = dict(zip(keys, vals))
Quand j'essaye ceci et imprime le dic j'obtiens ceci: {'[': "'",' c ':' o ',' 1 ':' 4 ',' d ':' c ',' - ':' o ',' m ':' ',' l ':' o ',' u ':' d ',' e ':' x ',' r ':' g ', "'": ']', '': "'",' 7 ':'. ',' 2 ':'. ',' 3 ':'. ',' 5 ':'. ',' 0 ':' 9 ',' 6 ' : ".", "9": ".", "4": ".", "8": "5"}
En supposant que vous ayez ce qui précède dans un tableau python appelé data , vous pouvez faire:
new_data = []
for i in range(0, len(data), 2):
new_data.append((data[i], data[i+1]))
Maintenant new_data serait une liste de tuples. Vous pouvez certainement créer une meilleure structure de données pour contenir ces paires si vous le souhaitez.
Lorsque j'ai essayé cette solution et imprimé le dictionnaire, j'ai obtenu ce résultat. Je ne sais pas ce qui ne fonctionne pas. [('[', "'"), (' c ',' b '), (' 1 ',' 3 '), (' 1 ','. '), (' d ',' c ') , ('-', '0'), ('1', '.'), ('C', 'o'), ('m', ''), ('d', 'c'), ('l', 'o'), ('u', 'd'), ('-', 'w'), ('e', 'b'), ('e', 'x'), ('-', 'o'), ('r', 'g'), ("'",', '), (' ', "'"), ('1', '4'), ( '7', '8'), ('2', '7'), ("'",', '), (' ', "'"), ('c', 'b'), .. ... c'était beaucoup plus long mais il n'y avait pas assez de personnages
Vous pouvez créer un itérateur à partir de la liste après avoir utilisé ast.literal_eval pour l'analyser à partir du texte d'entrée, zip l'itérateur avec lui-même, et passer la séquence générée de tuples au constructeur de dict:
import ast i = iter(ast.literal_eval(data)) dict(zip(i, i))
J'ai essayé cette solution et j'obtiens le même résultat que la solution ci-dessus lorsque j'essaye de l'imprimer: {'[': "'",' c ':' o ',' 1 ':' 4 ',' d ':' c ',' - ':' o ',' m ':' ',' l ':' o ',' u ':' d ',' e ':' x ',' r ':' g ', "'": ']', '': "'",' 7 ':'. ',' 2 ':'. ',' 3 ':'. ',' 5 ':'. ', '0': '9', '6': '.', '9': '.', '4': '.', '8': '5'} Je ne sais pas ce que je fais mal
Vous devez d'abord analyser le texte dans une liste réelle. J'ai mis à jour ma réponse en conséquence.
Parfait, ça a fait l'affaire. Merci beaucoup pour votre réponse rapide!!
J'ai également ajouté une belle déclaration imprimée pour aider d'autres personnes, voici ce que j'ai fait
En fait, j'ai regardé ces réponses et aucune d'elles n'est aussi claire que la réponse qui m'a été donnée à ma question. Ce sont aussi des questions similaires et non exactes. Chacun a un point de départ différent et veut un résultat différent qui ne correspond pas au mien. Je ne suis donc pas d'accord avec vous en le marquant comme un double.