如何从列表中提取值包含项的对应键?

伊拉

我有一个清单和一本字典。对于列表中的每个项目,我想在字典中检索其值包含该项目的键。

我尝试编写从列表中获取一项并每次循环遍历字典的代码,以查看值是否包含该项并返回键。我认为这将是O(n2)复杂度。

my_list = ['1.1.1.1','2.2.2.2','3.3.3.3']
my_dict = {
            1234 : '4.4.4.4,5.5.5.5,2.2.2.2',
            4567 : '6.6.6.6,7.7.7.7,1.1.1.1',
            8910 : '8.8.8.8,9.9.9.9,3.3.3.3'
            }

def get_key(my_list, my_dict):

    for item in my_list:
        for key, value in my_dict.items():
            temp_list = []
            temp_list = value.split(',')
            if item in temp_list:
                print(key)

get_key(my_list, my_dict)

Output:
4567
1234
8910

对于项目2.2.2.2,应返回键1234,依此类推。

有没有更优化的方法来实现这一目标?

宫城先生

由于您正在寻找完全匹配的内容,因此您可以倒转字典进行搜索。一次转换为O(n),但之后为O(1)。

inverse = {
    value: key
    for key, values in my_dict.items()
    for value in values.split(',')
}

有了这种反向结构,您可以直接从列表中查找键:

for item in my_list:
    print(inverse[item])

所有项目的求反和查找均为O(n)。由于循环不是嵌套的,因此总复杂度保持为O(n)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章