我正在嘗試從嵌套字典中獲取包含特定值的字典。
我的多個字典如下所示:
MyDto = [{'app' : 'chrome',
'id': 'adetwt',
'name': 'John',
'selection': {'food':1324, 'var1': 2039, 'var2': 2126, 'var3': 0}},
{'app' : 'chrome',
'id': 'asdfb',
'name': 'Sam',
'selection': {'food':1324, 'var1': 2011, 'var2': 2123, 'var3': 0}},
{'app' : 'chrome',
'id': 'sfsf',
'name': 'Mary',
'selection': {'food':1324, 'var1': 2013, 'var2': 2111, 'var3': 0}}]
我只想獲得具有特定值的字典。例如,在這個例子中,
if MyDto['id'] = 'sfsf'
我想要得到的結果是
extracted_dict = {'app' : 'chrome',
'id': 'sfsf',
'name': 'Mary',
'selection': {'food':1324, 'var1': 2013, 'var2': 2111, 'var3': 0}
有沒有辦法根據它包含的特定值來獲取字典?對不起,如果這是太基本的問題:(非常感謝!
uj5u.com熱心網友回復:
我會選擇類似的東西:
key,value = 'id','sfsf'
dictList = [ myDict for myDict in MyDto if myDict.get(key) == value ]
print(dictList)
輸出
[{'app': 'chrome', 'id': 'sfsf', 'name': 'Mary', 'selection': {'food': 1324, 'var1': 2013, 'var2': 2111, 'var3': 0}}]
串列理解顯然會產生一個字典串列,而不是單個字典。使用此串列理解,您可以掃描 中的所有 dicts MyDto,并僅選擇包含您選擇的鍵/值對的那些。如果 key 不存在于任何字典中MyDto,它也可以作業,即它避免KeyError例外并產生空串列。
如果您確定串列中最多只包含一個帶有鍵/值的字典:
def getByKeyAndValue(dictList, key, value):
for myDict in dictList:
if myDict.get(key) == value:
return myDict
return {}
extracted_dict = getByKeyAndValue(MyDto, 'id', 'sfsf')
此功能僅掃描您的MyDto內容,直到找到您要提取的字典。如果沒有找到字典,則回傳一個空字典。
uj5u.com熱心網友回復:
只需遍歷專案并獲得正確的字典,如下所示:
MyDto = [
{'app': 'chrome',
'id': 'adetwt',
'name': 'John',
'selection': {'food': 1324, 'var1': 2039, 'var2': 2126, 'var3': 0}},
{'app': 'chrome',
'id': 'asdfb',
'name': 'Sam',
'selection': {'food': 1324, 'var1': 2011, 'var2': 2123, 'var3': 0}},
{'app': 'chrome',
'id': 'sfsf',
'name': 'Mary',
'selection': {'food': 1324, 'var1': 2013, 'var2': 2111, 'var3': 0}}
]
def get_by_id(id: str):
for dict_ in MyDto:
if dict_['id'] == id:
return dict_['selection']
print(get_by_id('sfsf'))
uj5u.com熱心網友回復:
必須愛串列理解:
[d for d in MyDto if d['id'] == 'sfsf']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/425411.html
上一篇:如何在嚴格型別的Pydantic中使用驗證器,如StrictStr?
下一篇:Symfony驗證器條件驗證
