Python 在嵌套字典中搜索特定值并获取包含该值的字典
Python Search for a specific value in a nested dictionary and get one dictionary including the value
我正在尝试从嵌套字典中获取包含特定值的字典。
我的多部词典是这样的:
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}
有没有办法根据字典包含的特定值获取字典?抱歉,如果这是一个太基本的问题:( 非常感谢!
只需遍历项目并获得正确的字典,如下所示:
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']
我会选择类似的东西:
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}}]
列表理解显然会生成一个字典列表,而不是单个字典。
通过此列表理解,您可以扫描 MyDto
中的所有字典,并且 select 仅扫描包含您选择的 key/value 对的字典。
如果密钥不存在于 MyDto
中的任何字典中,它也有效,即它避免了 KeyError
异常并生成空列表。
如果您确定列表中至多只有一个带有 key/value 的字典:
def getByKeyAndValue(dictList, key, value):
for myDict in dictList:
if myDict.get(key) == value:
return myDict
return {}
extracted_dict = getByKeyAndValue(MyDto, 'id', 'sfsf')
此函数会扫描您的 MyDto
直到它找到您要提取的字典。如果它没有找到字典,它 returns 一个空字典。
我正在尝试从嵌套字典中获取包含特定值的字典。
我的多部词典是这样的:
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}
有没有办法根据字典包含的特定值获取字典?抱歉,如果这是一个太基本的问题:( 非常感谢!
只需遍历项目并获得正确的字典,如下所示:
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']
我会选择类似的东西:
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}}]
列表理解显然会生成一个字典列表,而不是单个字典。
通过此列表理解,您可以扫描 MyDto
中的所有字典,并且 select 仅扫描包含您选择的 key/value 对的字典。
如果密钥不存在于 MyDto
中的任何字典中,它也有效,即它避免了 KeyError
异常并生成空列表。
如果您确定列表中至多只有一个带有 key/value 的字典:
def getByKeyAndValue(dictList, key, value):
for myDict in dictList:
if myDict.get(key) == value:
return myDict
return {}
extracted_dict = getByKeyAndValue(MyDto, 'id', 'sfsf')
此函数会扫描您的 MyDto
直到它找到您要提取的字典。如果它没有找到字典,它 returns 一个空字典。