Найти вложенный голос внутри списка - PullRequest
0 голосов
/ 28 октября 2019

У меня есть список вложенных словарей, которые кэшируются для поиска возвращаемых результатов из BBDD.

Я хочу проверить, существует ли вложенный dict внутри моего списка, и вернуть его значение.

У моего дикта была такая структура:

cached_list= [{'session':'2019-02-03',
               'country':'spain',
               'isin': 'ES202121223'} , ...
}

Чтобы не бросать все значения, я сделал вложенный дикт внутри моего кэшированного списка:

list_cached = [{'2019-02-03':{'spain':'ES202121223'}} , ...]

Как вы можете видетьон имеет ту же структуру, но я использую ключ в качестве значений для проверки, существует ли эта структура.

Моя проблема в том, что я сохраняю все вложенные данные внутри списка, и я не знаю, как проверить, является ли эта структурасуществует в моем списке вложенных словарей.

Есть идеи для ее решения?

Спасибо.

Ответы [ 2 ]

1 голос
/ 28 октября 2019

Добавление примера ответа с помощью Pandas (на самом деле это не ответ, а пример для обработки списка диктов и использование мультииндекса для создания идеи вложенного диктата.)

>>> cached_list = [{'session': '2019-02-03', 'country': 'spain', 'isin': 'ES202121223'},
...                {'session': '2019-02-03', 'country': 'italy', 'isin': 'IT202121223'}]
>>> import pandas as pd
>>> df = pd.DataFrame(cached_list)
>>> df
      session country         isin
0  2019-02-03   spain  ES202121223
1  2019-02-03   italy  IT202121223
>>> df = df.set_index(df.index, 'session')
>>> df
      session country         isin
0  2019-02-03   spain  ES202121223
1  2019-02-03   italy  IT202121223

>>> df['session'] = pd.to_datetime(df['session'])
>>> from datetime import datetime
>>> df[df['session'] == datetime(2019, 2, 3)]
     session country         isin
0 2019-02-03   spain  ES202121223
1 2019-02-03   italy  IT202121223

Часть set_index на самом деле не нужна: если ее пропустить, то будет выбран только столбец данных.

1 голос
/ 28 октября 2019

Не самое симпатичное решение, но может работать вариант следующего понимания списка:

>>> list_cached = [{'2019-02-03':{'spain':'ES202121223'}}, 1, {'a': 1} ]
>>> [item for item in list_cached if isinstance(item, dict) and isinstance(list(item.values())[0], dict)]
[{'2019-02-03': {'spain': 'ES202121223'}}]

Два предложения isinstance проверяют, является ли элемент вложенным диктом. Обратите внимание, что это все еще не удается для пустого вложенного dict ({'2019-02-03': {}}).

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