Python在嵌套字典中搜索特定值,并获得一个包含该值的字典



我正在尝试从嵌套字典中获取一个包含特定值的字典。

我的多个词典如下所示:

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}

有没有一种方法可以根据字典中包含的特定值来获取字典?很抱歉,如果这是一个太基本的问题:(非常感谢!

我会选择这样的东西:

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列表,而不是一个dict。通过此列表理解,您可以扫描MyDto中的所有dict,并只选择包含您选择的配对键/值的dict。如果MyDto中的任何字典中都不存在密钥,也就是说,它可以避免KeyError异常并生成空列表。

如果您确信列表中最多只包含一个带键/值的dict:

def getByKeyAndValue(dictList, key, value):
for myDict in dictList:
if myDict.get(key) == value:
return myDict
return {}
extracted_dict = getByKeyAndValue(MyDto, 'id', 'sfsf')

此函数只扫描MyDto,直到找到要提取的dict为止。如果没有找到dict,则返回一个空dict。

只需迭代项目并获得正确的dict,如下所示:

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'))

必须热爱列表理解:

[d for d in MyDto if d['id'] == 'sfsf']

相关内容

  • 没有找到相关文章

最新更新