es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Extraer JSON anidados que tienen el mismo valor para una clave específica

En el siguiente JSON, quiero extraer una lista de todos los objetos JSON anidados (diccionarios anidados) que tienen el mismo valor para la clave “account_id”.

Para el ejemplo anterior, espero obtener lo siguiente:

[
    {
        "index": 3,
        "timestamp": 1644585214.7012236,
        "transactions": [
            {
                "account_id": "13",
                "device_id": "43"
            }
        ]
    },
    {
        "index": 4,
        "timestamp": 1644752214.7012756,
        "transactions": [
            {
                "account_id": "13",
                "device_id": "44"
            }
        ]
    }
]

Intenté iterar sobre cada diccionario pero no logré obtener el resultado deseado:

l = []
for entry in data:
    l = l + entry['transactions']

print([transaction['ticket_id'] for transaction in l if 'ticket_id' in transaction]) # que solo lista todos los valores de ticket_id

Seguramente debe haber una forma ‘fácil’, tal vez a través del módulo json.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Aquí hay un enfoque usando una comprensión de lista:

    result = [d for d in data if any(t.get('account_id') == '13' for t in d.get('transactions', []))]
    

    Esto itera sobre cada diccionario en la lista data y verifica si alguna de sus transactions tiene un account_id de “13”. Si es así, incluye ese diccionario en la lista result.

    Puedes reemplazar “13” con cualquier ID de cuenta que te interese.

Comments are closed.