1
votes

Création d'un dictionnaire à l'aide de python à partir de données var javascript

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


1 commentaires

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.


4 Réponses :


0
votes

Je ne connais pas encore Python que je peux écrire un extrait, mais:

  • initialiser un dictionnaire vide en Python
  • créez un index de comptage de boucle for de 0 à la longueur de votre tableau par étapes de deux.
    • à l'intérieur, ajoutez une entrée de dictionnaire avec une clé de valeur à l'index et une valeur à l'index + 1
    • peut-être vérifier les doublons

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]


0 commentaires

1
votes

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


1 commentaires

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



0
votes

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.


1 commentaires

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



0
votes

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


4 commentaires

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