的嵌套列表我有字典的嵌套列表類似如下:高效篩選字典
list_of_dict = [
{
"key": "key1",
"data": [
{
"u_key": "u_key_1",
"value": "value_1"
},
{
"u_key": "u_key_2",
"value": "value_2"
}
]
},
{
"key": "key2",
"data": [
{
"u_key": "u_key_1",
"value": "value_3"
},
{
"u_key": "u_key_2",
"value": "value_4"
}
]
}
]
正如你可以看到list_of_dict
是字典的列表,裏面的是,data
也是字典的列表。假設list_of_dict
和data
內部的所有對象具有相似的結構,並且所有密鑰始終存在。
在接下來的步驟I轉換list_of_dict
到list_of_tuples
,其中元組的第一個元素是key
隨後針對value
密鑰的所有值內data
list_of_tuples = [
('key1', 'value_1'),
('key1', 'value_2'),
('key2', 'value_3'),
('key2','value_4')
]
的最後一步是用一個列表(comparison_list
)比較。列表包含string
值。列表中的值可以來自value
關鍵內部數據。我需要檢查comparison_list
中的任何值是否在list_of_tuples
之內,並獲取該值的鍵(第一個元組項)。
comparison_list = ['value_1', 'value_2']
我的預期輸出是:
out = ['key1', 'key1']
我的解決方案如下:
>>> list_of_tuples = [(c.get('key'),x.get('value'))
for c in list_of_dict for x in c.get('data')]
>>> for t in list_of_tuple:
if t[1] in comparison_list:
print("Found: {}".format(t[0]))
所以問題總結是,我有我需要找到值(comparison_list
)的列表在data
陣列內。
我正在操作的數據集非常大(> 100M)。我期待加快我的解決方案並使其更加緊湊和可讀。 我能以某種方式跳過創建list_of_tuples
並直接進行比較的步驟嗎?
不知怎的,你的例子並不適合。你的意思是'(c.get('key'),x.get('value')'?無論如何,如果你想加快速度,可能是一個很好的'compare_list'設置' –
@ tobias_k是的,我已經編輯了這個問題,我會嘗試設置謝謝:) –
comparison_list = ['value_1','value_2']是您的預期輸出? –