我有一个嵌套字典的列表,该列表被缓存以从BBDD查找返回的结果。
我想要的是检查嵌套的字典是否存在于我的列表中并返回它具有的值。
我的字典具有以下结构:
cached_list= [{'session':'2019-02-03',
'country':'spain',
'isin': 'ES202121223'} , ...
}
为了避免抛出所有值,我在缓存列表中做了一个嵌套的字典:
list_cached = [{'2019-02-03':{'spain':'ES202121223'}} , ...]
您可以看到它具有相同的结构,但是我使用键作为值来检查该结构是否存在。
我的问题是,我将所有嵌套的字典保存在列表中,但我不知道如何检查嵌套字典列表中是否存在该结构。
有解决的想法吗?
谢谢。
不是最漂亮的解决方案,但是可以对以下列表理解进行一些修改:
>>> 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
子句检查项目是否为嵌套字典。请注意,这对于空的嵌套字典({'2019-02-03': {}}
)仍然失败。
添加熊猫示例答案(实际上不是答案,而是处理字典列表并使用多索引来创建嵌套字典的示例。]
>>> 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
部分并不是真正必要的:将其保留下来将直接在数据列上直接选择。