基于值返回字典名称

2024-09-30 05:24:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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,假设所有值都是唯一的。你知道吗


Tags: 文件json字典新手data1data2dict1data3
2条回答

除非我对JSON的知识不太了解,否则看起来你的dict里面有一个dict?解决这个问题的一个简单方法是将这些dict对象提取到单独的变量中,假设您将它们提取到“d1”和“d2”中。你知道吗

我们可以通过以下代码行查看python中的字典是否包含特定值:

"j" in d1.values()

如果“j”是字典中任何键的值,则返回true。如果您在示例中的顶级字典上执行此操作,那么它将不起作用,您将需要编写额外的代码来递归地搜索指定给顶级字典中某个键的字典。你知道吗

因此,将字典提取到单独的变量中,然后在if语句中调用上面的代码行来确定值是否在字典中会更容易。您需要以某种方式跟踪每一个字典,循环浏览这些字典并存储每一个字典是否包含您的值。你知道吗

如果您的数据结构已经建立,并且您知道您将在多大程度上找到内容,那么拥有一个字典并不是一个问题。然而,如果结构比你所拥有的要深得多,事情就会变得复杂。您的问题的简单解决方案是:

#!/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']

相关问题 更多 >

    热门问题