Удалите словарь, если в Python найден пустой список - PullRequest
0 голосов
/ 12 июля 2020

У меня есть список имеющихся словарей. Ниже приведены мои образцы данных:

[
  {
    "Customer_id": "123",
    "Account_no": "123456789012",
    "Amount": 3000,
    "Transaction": [
      {
        "date": "20/06/25",
        "time": "12:19:39",
        "Shop": "Amazon",
        "Comments": "Valuable items"
      }
    ]
  },
  {
    "Customer_id": "123",
    "Account_no": "123456789012",
    "Amount": 3000,
    "Transaction": []
  }
]

Здесь мне нужно удалить словарь, если я обнаружил, что список транзакций пуст. Ниже показан код, который я пробовал:

 res=list(filter(None,({key:val for key,val in sub.items() if val} for sub in results)))
 #results is the list of dictionary

Мой результат:

[
  {
    "Customer_id": "123",
    "Account_no": "123456789012",
    "Amount": 3000,
    "Transaction": [
      {
        "date": "20/06/25",
        "time": "12:19:39",
        "Shop": "Amazon",
        "Comments": "Valuable items"
      }
    ]
  },
  {
    "Customer_id": "123",
    "Account_no": "123456789012",
    "Amount": 3000,
  }
]

Я могу удалить только этот конкретный список, но не связанные с ним детали.

Ожидаемый результат:

[
  {
    "Customer_id": "123",
    "Account_no": "123456789012",
    "Amount": 3000,
    "Transaction": [
      {
        "date": "20/06/25",
        "time": "12:19:39",
        "Shop": "Amazon",
        "Comments": "Valuable items"
      }
    ]
  }
]

Пожалуйста, дайте мне знать, как это сделать который. Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 12 июля 2020
  • Неясно, какова конечная цель для данных, но использование pandas - вариант, если вы также хотите провести какой-либо анализ.
  • В частности, используйте pandas.json_normalize, что отлично подходит для чтения в списках JSON (dict) данных
    • Если Transaction - пустой список, набор данных будет проигнорирован во время синтаксического анализа
  • В следующем примере с использованием вашего образца JSON назначено data
  • Обратите внимание, что фрейм данных не включает данные, где Transaction было пустым
  • Теперь данные можно анализировать.
  • В этом ответе предполагается, на основе данных примера, что ключ Transaction всегда будет присутствовать.
import pandas as pd

# create the dataframe
df = pd.json_normalize(data, 'Transaction', ['Customer_id', 'Account_no', 'Amount'])

# display(df)
       date      time    Shop        Comments Customer_id    Account_no Amount
0  20/06/25  12:19:39  Amazon  Valuable items         123  123456789012   3000
1 голос
/ 12 июля 2020

вы можете использовать следующее понимание списка

res = [sub for sub in results if sub['Transaction']]

Результат

[
    {
       'Customer_id': '123', 
       'Amount': 3000, 
       'Account_no': 
       '123456789012', 
       'Transaction': 
           [
               {
                   'Comments': 'Valuable items', 
                   'time': '12:19:39', 
                   'date': '20/06/25', 
                   'Shop': 'Amazon'
               }
          ]
     }
]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...