11
votes

Utilisation de Python pour extraire des clés de dictionnaire dans une liste

J'ai reçu une liste lors de la saisie de l'URL suivante - http: //api.Twitter. COM / 1 / Trends / 44418.json

La liste contient plusieurs dictionnaires et je suis un peu confus avec la structure de la liste. J'essaie d'obtenir les valeurs associées à la touche "Nom".

Par exemple:

"Nom": "# jeterra" "Nom": "Rebecca Black" "Nom": "# Questions"

Je peux écrire le code moi-même, j'essaie simplement de comprendre avec conceptuellement accéder à des dictionnaires (et de leurs paires de clé / valeur) dans une liste.


1 commentaires

Juste une note, Twitter utilise une API V1.1 maintenant qui nécessite une authentification. Vous pouvez en savoir plus sur l'accès aux Trends ici .


4 Réponses :


1
votes

C'est un fichier JSON, vous devez donc utiliser un analyseur JSON pour le lire. Il y a un analyseur dans Python 2.7 - Just Importer JSON . Avec cette structure, vous pouvez ensuite le manipuler de Python.

Si vous ne vous souciez vraiment pas d'où dans la structure Les touches nom sont, vous pouvez recueillir dans l'arbre à la recherche d'eux ( si clé == "Nom" ), ou peut-être utiliser une expression régulière.

L'expression régulière sera beaucoup de douleur, cependant, en raison de la nécessité d'inclure des caractères échappés dans une correspondance.


1 commentaires

L'idée d'utiliser une expression régulière me donne un mal de tête en pensant!



8
votes

Eh bien, pour un début, ce lien vous donne JSON, vous aurez donc besoin de le désérialiser avec la bibliothèque JSON code> JSON:

names = [item['name'] for item in data]


1 commentaires

La liste des dictionnaires contenant les noms ne figure pas dans la racine des données, elles sont dans [0] ['Tendances']



22
votes

La première chose que je ferais lorsque vous travaillez avec une grosse morceau de JSON, est d'essayer de l'obtenir dans un format plus lisible. Cet outil de mise en forme JSON en ligne devrait faire le travail.

Voici un code qui obtiendra tous les noms de tendance: xxx pré>

ou vous pouvez tout faire en une ligne: p> xxx pré>

Les deux résultent: p>

#throwagrenade
Rebecca Black
Eric Abidal
#questionsihate
#juniordoctors
Smiley Culture
Lily Allen
Wes Brown
Pandev
Ray Wilkins


2 commentaires

Merci! Une bonne réponse, appréciez également le matériel de lecture supplémentaire.


Je recommanderais également le nouveau Plongée dans Python 3 - Les dictionnaires et les listes sont mentionnés dans la section Chapitre 2. DataTypes natifs .



4
votes
names = [u'#throwagrenade', u'Rebecca Black', u'#questionsihate',
    u'#thingsthatdontgotogether', u'Eric Abidal', u'Smiley Culture',
    u'Ray Wilkins', u'Wes Brown', u'Twenty Twelve', u'Marseille']

0 commentaires