hye*_*ppy 1 python validation dictionary extract
我正在尝试获取包含嵌套字典中的特定值的字典。
我的多个词典如下所示:
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}}]
Run Code Online (Sandbox Code Playgroud)
我只想获取具有特定值的字典。例如,在这个例子中,
if MyDto['id'] = 'sfsf'
Run Code Online (Sandbox Code Playgroud)
我想要得到的结果是
extracted_dict = {'app' : 'chrome',
'id': 'sfsf',
'name': 'Mary',
'selection': {'food':1324, 'var1': 2013, 'var2': 2111, 'var3': 0}
Run Code Online (Sandbox Code Playgroud)
有没有办法根据字典包含的特定值获取字典?抱歉,如果这个问题太基本了:( 非常感谢!
我会选择类似的东西:
key,value = 'id','sfsf'
dictList = [ myDict for myDict in MyDto if myDict.get(key) == value ]
print(dictList)
Run Code Online (Sandbox Code Playgroud)
输出
[{'app': 'chrome', 'id': 'sfsf', 'name': 'Mary', 'selection': {'food': 1324, 'var1': 2013, 'var2': 2111, 'var3': 0}}]
Run Code Online (Sandbox Code Playgroud)
列表理解显然会生成一个字典列表,而不是单个字典。通过此列表理解,您可以扫描 中的所有字典MyDto,并仅选择包含您选择的键/值对的字典。如果该键不存在于 中的任何字典中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')
Run Code Online (Sandbox Code Playgroud)
该函数MyDto只会扫描您的字典,直到找到您想要提取的字典。如果找不到该字典,则返回一个空字典。