我是python的新手,我想对字典进行反向查找。我有一个从JSON文件构建的字典,看起来类似于:
{
"dict1" : {
"data1" : "a",
"data2" : "b",
"data3" : "c",
"data4" : "d",
"data5" : "e"
},
"dict2" : {
"data1" : "f",
"data2" : "g",
"data3" : "h",
"data4" : "i",
"data5" : "j"
}
}
如果我想知道哪个词典'dict1'或'dict2'包含值j,假设所有值都是唯一的。
答案 0 :(得分:2)
除非我的JSON知识让我失望,否则看起来你实际上在某个词典中有一个词典?解决这个问题的一个简单方法是将这些dict对象提取到单独的变量中,假设你将它们提取到“d1”和“d2”中。
我们可以看到python中的字典是否包含具有以下代码行的特定值:
MATCH 1
> 1. [69-87] `0x000000000B0D9A20`
> 2. [130-148] `0x00000000846F4900`
MATCH 2
> 1. [288-306] `0x000000000296F1E8`
> 2. [317-326] `<unknown>`
MATCH 3
> 1. [466-484] `0x0000000030A0C590`
> 2. [495-504] `<unowned>`
如果“j”是字典中任何键的值,则返回true。如果您在示例中的顶级字典上执行此操作它将无法工作,您将需要编写额外的代码以递归搜索分配给顶级字典中的键的字典。
因此,将字典提取到单独的变量中会更容易,然后在if语句中调用上面的代码行来确定该值是否在字典中。您需要以某种方式跟踪每个字典,遍历这些字典并存储每个字典是否包含您的值。
答案 1 :(得分:1)
拥有词典字典确实不是问题,假设您的数据结构已经建立,并且您知道您将在何种深度找到事物。然而,如果结构比你的结构更深,那么事情会变得复杂。您问题的简单解决方案是:
#!/usr/bin/env python3
json_dict = {
"dict1": {
"data1": "a",
"data2": "b",
"data3": "c",
"data4": "d",
"data5": "e"
},
"dict2": {
"data1": "f",
"data2": "g",
"data3": "h",
"data4": "i",
"data5": "j"
},
"dict3": {
"data42": "c",
"data43": "g"
}
}
def which_dict_key(value, dicts):
'''
Return a list of keys for a dictionary where the
value dictionary for that key includes the value
provided.
'''
return [key for key in dicts if value in dicts[key].values()]
if __name__ == '__main__':
print(which_dict_key("j", json_dict))
print(which_dict_key("c", json_dict))
print(which_dict_key("q", json_dict))
print(which_dict_key("g", json_dict))
产生:
['dict2']
['dict1', 'dict3']
[]
['dict3', 'dict2']