0
votes

Python: Imprimez certains éléments d'un appel API qui est une liste et non un dict

Je travaille avec une API d'échange de cryptocurrence et je suis coincé à essayer de tirer simplement le symbole et durer de la liste de l'API. J'ai trouvé de nombreuses solutions si la liste était dans le code lui-même, mais j'ai du mal à tirer de l'API, alors les deux objets souhaités, les champs, tout ce que vous souhaitez l'appeler, mais lors de la vérification des clés, je n'en obtiens aucun. J'ai essayé de nombreuses méthodes trouvées sur ce site et des tutoriels par d'autres, mais continuez à courir dans des erreurs. Voici mon code pour parler à l'API:

<class 'bytes'>


3 commentaires

Pouvez-vous également inclure ce que la production devrait ressembler?


Dupliqué possible de Python Obtenir une liste de valeur de la liste de la liste des dict


Vous vous comprenez mal, je vous demande si la liste doit être transformée en dict, la sortie API est une liste et je veux simplement tirer le symbole et durer de la liste complète qui, comme vous pouvez le constater à partir de mon impression (type (données)) C'est une liste


3 Réponses :


0
votes

penser à data ​​code> comme liste des dicts. Dans chaque dict, vous souhaitez récupérer seulement deux {clé: valeur} paires.

Ainsi, ce que vous pouvez faire est pour chaque élément de données: obtenez la touche deux, valeur de valeur que vous souhaitez et les ajouter à une nouvelle liste. p>

IE P>

    parsed_data = []
    for _dict in data: 
        new_dict = { "symbol": _dict["symbol"], "last": _dict["last"] }
        parsed_data.append(new_dict) 


4 commentaires

le problème est quand je exécutoire des touches d'impression (oui je sais que ce n'est pas l'impression exacte) Je n'obtiens pas de clés car il s'agit d'une liste


Je suppose que vous avez utilisé l'extrait de données et la mettez dans une liste vs ce que le code est tiré de l'API car je reçois les suivants à l'aide de votre réponse: Soulevez TypeError (l'objet JSON doit être STR, Bytes ou ByTeArray, '' TypeError: L'objet JSON doit être STR, octets ou byTeArray, pas de réponse


Construire sur votre idée, comment obtiendrais-je des données (info tiré de l'API) dans les données analysées? Peut-être que cela fonctionnerait? Dump la liste API JSON dans une dicte puis analyser? Cela faisait partie de mon idée d'op. Tournez la liste des API JSON tirée en dict puis analyser la dicte.


C'était vraiment proche, j'ai trouvé un tutoriel après beaucoup de googles et pour la première fois en 2 heures, j'ai eu tous les symboles à imprimer dans une liste



0
votes

Itéréter sur la liste des dictionnaires dans Data ​​CODE> Liste Obtenir la valeur du dictionnaire par KEULE CODE>:

print([['symbol:', d.get('symbol', None), 'last:', d.get('last', None)] for d in data if ('symbol' in d and 'last' in d)])


4 commentaires

Je suppose que vous avez utilisé l'extrait de la liste et je l'ai placée dans une liste vs moi en tirant les données de l'API comme en utilisant l'une de vos options, lors de l'exécution du code que j'obtiens: Soulevez TypeError (l'objet JSON doit être STR, Bytes ou BYEARDRAY, 'TypeError: L'objet JSON doit être STR, octets ou byTeArray, pas de réponse


oui désolé pour la confusion, je ne peux pas reproduire votre réponse de l'API


J'ai trouvé 3 façons de changer de classe si cela aide, j'ai reçu des octets, Str et la liste, peut-être que l'on est plus facile que les autres, j'ai mis à jour mon op


Honnêtement, l'échange qui a fait cette API n'est pas facile à travailler avec, un autre site se connecte à leur API et en fait un dict, mais ils ne donnent pas de lien avec toutes les pièces de monnaie, vous devez ajouter la paire de pièces à la fin de l'adresse



0
votes

Après des heures d'essayage et de bricolage et de googling, j'ai trouvé quelqu'un avec le même problème, différent de code, un format de liste similaire API JSON et une fois l'adaptation d'une partie de leur code à la mienne, je n'ai que les symboles à imprimer à partir de la liste et des symboles Donc, d'ici, je peux faire des ajustements mineurs pour imprimer uniquement les symboles et le dernier et un petit indenter le rendent joli. Ils ont fait quelque chose de très proche de mon code, mais j'ai largué leur API dans un fichier d'abord alors s'il vous plaît laissez-moi savoir s'il s'agit d'une meilleure façon, alors ci-dessous:

def pull():
    r = requests.get('API_ADDRESS')
    data = r.json()
    # use to confirm class type
    #print(type(data))
    # use to see if keys are present
    #print(data.keys())
    items = []
    for item in data:
        items.append(item['symbol'])
    print(items)


0 commentaires