10 python one-liners pour l’analyse JSON et le traitement

Image de l’auteur | Idéogramme
# Introduction
La plupart des applications reposent fortement sur JSON pour l’échange de données, la gestion de la configuration et la communication API.
Le module JSON intégré de Python combiné aux compréhensions de la liste et aux opérations de dictionnaire permet d’effectuer des manipulations JSON complexes avec un code étonnamment concis. Ces doublures vous aideront à analyser, transformer et extraire efficacement des informations significatives à partir des données JSON.
# Création d’échantillons de données
Créons des ensembles de données JSON réalistes qui représentent des scénarios communs que vous rencontrerez dans des applications réelles:
import json
from collections import defaultdict, Counter
# Sample product catalog
products = (
{"id": 1, "name": "Laptop", "price": 999.99, "category": "Electronics", "stock": 25, "rating": 4.5},
{"id": 2, "name": "Coffee Maker", "price": 79.99, "category": "Appliances", "stock": 15, "rating": 4.2},
{"id": 3, "name": "Smartphone", "price": 699.99, "category": "Electronics", "stock": 50, "rating": 4.7},
{"id": 4, "name": "Desk Chair", "price": 159.99, "category": "Furniture", "stock": 8, "rating": 4.1},
{"id": 5, "name": "Headphones", "price": 199.99, "category": "Electronics", "stock": 30, "rating": 4.6}
)
# Sample employee data
employees = (
{"name": "Alice Johnson", "department": "Engineering", "salary": 95000, "projects": ("API", "Database")},
{"name": "Bob Smith", "department": "Marketing", "salary": 65000, "projects": ("Campaign", "Analytics")},
{"name": "Carol Davis", "department": "Engineering", "salary": 105000, "projects": ("Frontend", "Testing")},
{"name": "David Wilson", "department": "Sales", "salary": 75000, "projects": ("Outreach", "CRM")}
)
# Sample nested API response
api_response = {
"status": "success",
"data": {
"orders": (
{"id": "ORD001", "customer": {"name": "John Doe", "email": "john@example.com"}, "items": ({"product": "Laptop", "quantity": 1})},
{"id": "ORD002", "customer": {"name": "Jane Smith", "email": "jane@example.com"}, "items": ({"product": "Mouse", "quantity": 2})}
),
"total_orders": 2
}
}
Dans les exemples qui suivent, j’ai omis les déclarations d’impression et je me suis concentré sur les one-liners eux-mêmes.
# 1. Extraire toutes les valeurs pour une clé spécifique
Lorsque vous travaillez avec des tableaux JSON, vous devez souvent extraire toutes les valeurs pour un champ particulier sur plusieurs objets. Cette ligne unique attribue efficacement des valeurs spécifiques à partir de structures imbriquées, ce qui le rend parfait pour créer des listes de résumé ou préparer des données pour une analyse plus approfondie.
product_names = (item('name') for item in products)
Cette compréhension de la liste itère via chaque dictionnaire dans la liste des produits et extrait le champ «Nom». La notation du support carré accède directement à la clé, créant une nouvelle liste ne contenant que les valeurs souhaitées tout en maintenant l’ordre d’origine.
('Laptop', 'Coffee Maker', 'Smartphone', 'Desk Chair', 'Headphones')
# 2. Filtrage des objets JSON par condition
Le filtrage des données est essentiel lorsque vous travaillez avec de grands ensembles de données JSON. Cette liner combine la compréhension de la liste avec une logique conditionnelle pour extraire uniquement des objets qui répondent aux critères spécifiques, permettant une création rapide de sous-ensembles de données sans boucles complexes.
expensive_products = (item for item in products if item('price') > 200)
L’expression conditionnelle évalue le champ de prix de chaque produit et ne comprend que les objets où la condition est vraie.
({'id': 1,
'name': 'Laptop',
'price': 999.99,
'category': 'Electronics',
'stock': 25,
'rating': 4.5},
{'id': 3,
'name': 'Smartphone',
'price': 699.99,
'category': 'Electronics',
'stock': 50,
'rating': 4.7})
# 3. Groupement d’objets JSON par valeur de champ
La catégorisation des données par des attributs spécifiques est une exigence commune dans le traitement des données. Cette lignée crée un dictionnaire où les clés représentent des valeurs de champ uniques et les valeurs contiennent des listes de partage d’objets qui attribuent, permettant une organisation et une analyse de données efficaces.
products_by_category = {k: (item for item in products if item('category') == k) for k in set(item('category') for item in products)}
La compréhension du dictionnaire crée d’abord un ensemble de valeurs de catégorie uniques, puis pour chaque catégorie, filtre la liste des produits pour inclure uniquement les articles correspondants.
{'Furniture': ({'id': 4,
'name': 'Desk Chair',
'price': 159.99,
'category': 'Furniture',
'stock': 8,
'rating': 4.1}),
'Appliances': ({'id': 2,
'name': 'Coffee Maker',
'price': 79.99,
'category': 'Appliances',
'stock': 15,
'rating': 4.2}),
'Electronics': ({'id': 1,
'name': 'Laptop',
'price': 999.99,
'category': 'Electronics',
'stock': 25,
'rating': 4.5},
{'id': 3,
'name': 'Smartphone',
'price': 699.99,
'category': 'Electronics',
'stock': 50,
'rating': 4.7},
{'id': 5,
'name': 'Headphones',
'price': 199.99,
'category': 'Electronics',
'stock': 30,
'rating': 4.6})}
# 4. Calcul des statistiques agrégées de JSON
Une analyse statistique rapide des données JSON aide à identifier les tendances et les modèles. Cette one-liner calcule plusieurs fonctions agrégées simultanément, fournissant des informations complètes sur les caractéristiques numériques de votre ensemble de données sans écrire de boucles de calcul distinctes.
price_stats = {'min': min(item('price') for item in products), 'max': max(item('price') for item in products), 'avg': sum(item('price') for item in products) / len(products)}
La compréhension du dictionnaire applique différentes fonctions d’agrégats aux mêmes valeurs extraites, en utilisant des expressions de générateur pour l’efficacité de la mémoire.
{'min': 79.99, 'max': 999.99, 'avg': 427.98999999999995}
# 5. Transformer la structure JSON
La restructuration des données JSON pour correspondre à différents schémas ou exigences d’API est souvent nécessaire. Cette lignée crée de nouveaux objets avec des noms de champ modifiés, des valeurs calculées ou des attributs filtrés, permettant une transformation de données transparente entre différents formats système.
simplified_products = ({'title': item('name'), 'cost': item('price'), 'available': item('stock') > 0} for item in products)
La compréhension de la liste crée de nouveaux dictionnaires avec des noms de champ transformés et des valeurs booléennes calculées. Cette approche permet de renommer sur le terrain, de la conversion de type et d’attributs calculés dans une seule expression tout en maintenant un code propre et lisible.
({'title': 'Laptop', 'cost': 999.99, 'available': True},
{'title': 'Coffee Maker', 'cost': 79.99, 'available': True},
{'title': 'Smartphone', 'cost': 699.99, 'available': True},
{'title': 'Desk Chair', 'cost': 159.99, 'available': True},
{'title': 'Headphones', 'cost': 199.99, 'available': True})
# 6. Extraire les valeurs imbriquées en toute sécurité
Les données JSON imbriquées vous obligent à gérer soigneusement toutes les clés manquantes pour éviter les erreurs. Cette ligne unique utilise la méthode GET avec des valeurs par défaut pour extraire en toute sécurité des informations imbriquées, garantissant un code robuste qui gère également les données incomplètes ou mal formées.
customer_emails = (order.get('customer', {}).get('email', 'N/A') for order in api_response('data')('orders'))
Le enchaîné .get() Les méthodes fournissent des valeurs par défaut à chaque niveau, empêchant KeyErrorExceptions lors de l’accès à des structures imbriquées. Cette approche est essentielle lorsque vous travaillez avec des API externes ou des données générées par l’utilisateur où la présence sur le terrain n’est pas garantie.
('john@example.com', 'jane@example.com')
# 7. Comptage des occurrences de valeurs de champ
La compréhension des modèles de distribution des données nécessite de compter à quelle fréquence les valeurs spécifiques apparaissent sur votre ensemble de données. Cette lignée crée une carte de fréquence des valeurs de champ, offrant un aperçu immédiat de la composition des données et en aidant à identifier les modèles ou les valeurs aberrantes communes.
category_counts = Counter(item('category') for item in products)
Le Counter La classe correspond automatiquement aux occurrences de chaque valeur unique de l’expression du générateur. Cette approche est plus efficace que les boucles de comptage manuelles.
Counter({'Electronics': 3, 'Appliances': 1, 'Furniture': 1})
# 8. Fusion de plusieurs objets JSON
La combinaison de données provenant de plusieurs sources JSON est courante lorsque vous travaillez avec des microservices ou des systèmes fédérés. Cette lignée fusionne des objets en faisant correspondre les clés, créant des enregistrements consolidés qui contiennent des informations provenant de différentes sources.
enhanced_products = ({**product, 'total_value': product('price') * product('stock')} for product in products)
Le dictionnaire déballage déballage les champs existants tout en ajoutant de nouvelles valeurs calculées.
({'id': 1,
'name': 'Laptop',
'price': 999.99,
'category': 'Electronics',
'stock': 25,
'rating': 4.5,
'total_value': 24999.75},
{'id': 2,
'name': 'Coffee Maker',
'price': 79.99,
'category': 'Appliances',
'stock': 15,
'rating': 4.2,
'total_value': 1199.85},
...
{'id': 5,
'name': 'Headphones',
'price': 199.99,
'category': 'Electronics',
'stock': 30,
'rating': 4.6,
'total_value': 5999.700000000001})
# 9. Trouver des objets avec des valeurs maximales / minimales
L’identification des enregistrements avec des valeurs extrêmes est essentielle pour l’analyse des données et le contrôle de la qualité. Cette ligne unique trouve des objets contenant les valeurs les plus élevées ou les plus basses pour des champs spécifiques, permettant une identification rapide des valeurs aberrantes, des performances les plus élevées ou des cas de bord dans votre ensemble de données.
highest_rated = max(products, key=lambda x: x('rating'))
Le max fonction avec un key Le paramètre renvoie l’objet avec la valeur maximale de la touche spécifiée. Cette approche est plus lisible que l’itération manuelle et fonctionne avec tout type de champ comparable, y compris les chaînes et les dates.
{'id': 3,
'name': 'Smartphone',
'price': 699.99,
'category': 'Electronics',
'stock': 50,
'rating': 4.7}
# 10. Aplatir les tableaux JSON imbriqués
Les structures JSON complexes contiennent souvent des tableaux imbriqués qui doivent être aplatis pour l’analyse ou le traitement. Cette ligne unique extrait et combine des éléments de listes imbriquées, créant une seule structure plate qui est plus facile à travailler dans les opérations suivantes.
projects_list = (project for employee in employees for project in employee('projects'))
La compréhension de la liste imbriquée itère d’abord par le biais des employés, puis via la liste des projets de chaque employé, créant une gamme aplatie de tous les noms de projet. Cette structure à double boucle gère efficacement les tableaux imbriqués de longueur variable.
('API',
'Database',
'Campaign',
'Analytics',
'Frontend',
'Testing',
'Outreach',
'CRM')
# Conclusion
Ces one-liners Python montrent à quel point Python est utile pour la manipulation des données JSON.
La clé est de comprendre les fonctions, les compréhensions intégrées de Python et la flexibilité des opérations de dictionnaire.
En utilisant ces derniers, vous serez probablement en mesure de traiter rapidement les réponses d’API, de transformer les données entre différents formats et d’extraire des informations utiles à partir de structures JSON complexes.
Bala Priya C est développeur et écrivain technique d’Inde. Elle aime travailler à l’intersection des mathématiques, de la programmation, de la science des données et de la création de contenu. Ses domaines d’intérêt et d’expertise incluent DevOps, la science des données et le traitement du langage naturel. Elle aime lire, écrire, coder et café! Actuellement, elle travaille sur l’apprentissage et le partage de ses connaissances avec la communauté des développeurs en créant des tutoriels, des guides pratiques, des pièces d’opinion, etc. Bala crée également des aperçus de ressources engageants et des tutoriels de codage.
