Python 在字典中查找嵌套键

Python 在字典中查找嵌套键,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,我有几本字典,字典键是元组 在每个字典中,键的长度总是相同的 我想找到嵌套键并打印它们 字典示例: dic_1 = { (u'A_String', u'B_String', u'C_String', u'D_String', u'E_String'): 111, (u'A_String', u'B_String', u'C_String', u'D_String' ,u'F_String'): 112 } dic_2 = { (u'A_String', u'B_S

我有几本字典,字典键是元组

在每个字典中,键的长度总是相同的

我想找到嵌套键并打印它们

字典示例:

dic_1 = {
    (u'A_String', u'B_String', u'C_String', u'D_String', u'E_String'): 111, 
    (u'A_String', u'B_String', u'C_String', u'D_String' ,u'F_String'): 112
}

 dic_2 = {
     (u'A_String', u'B_String', u'C_String', u'D_String'): 300, 
     (u'A_String', u'B_String', u'C_String', u'F_String'): 301,
 }

dic_3 = {
    (u'A_String', u'B_String', u'C_String'): 200, 
    (u'A_String', u'B_String', u'F_String'): 201,
}
dic_3
中的第一行嵌套在
dic_2
dic_1

dic_2
中的第一行嵌套在
dic_1

我试过:

for key in dic_1:
    print '-',key
    for k in dic_2:
        if k in tuple(key):
            print '--', k
            for i in dic_3:
                if i in tuple(k):
                    print '---', i

编辑:快速阅读问题,下面是回答问题的编辑

dic_1 = {
 (u'A_String', u'B_String', u'C_String', u'D_String', u'E_String'): 111,
 (u'A_String', u'B_String', u'C_String', u'D_String' ,u'F_String'): 112
}


dic_2 =  {
 (u'A_String', u'B_String', u'C_String', u'D_String'): 300,
 (u'A_String', u'B_String', u'C_String', u'F_String'): 301,
 }


dic_3 =  {
 (u'A_String', u'B_String', u'C_String'): 200,
 (u'A_String', u'B_String', u'F_String'): 201,
}

from itertools import permutations

dicts = [dic_1, dic_2, dic_3]
for x, y in  permutations(range(len(dicts)), 2):
    print x, y
    dic_x = dicts[x]
    dic_y = dicts[y]
    for k in dic_x.keys():
        for j in dic_y.keys():
            if len(set(k) - set(j)) is 0:
                print 'Key %s of dict %s is contained in key %s of dict %s' % (k, x + 1, j, y + 1)
                break
dict 2的键(u'A_字符串、u'B_字符串、u'C_字符串、u'D_字符串)包含在dict 1的键(u'A_字符串、u'B_字符串、u'C_字符串、u'D_字符串、u'E_字符串)中
dict 2的键(u'A_字符串、u'B_字符串、u'C_字符串、u'F_字符串)包含在dict 1的键(u'A_字符串、u'B_字符串、u'C_字符串、u'D_字符串、u'F_字符串)中
dict 3的键(u'A_字符串、u'B_字符串、u'F_字符串)包含在dict 1的键(u'A_字符串、u'B_字符串、u'C_字符串、u'D_字符串、u'F_字符串)中
dict 3的键(u'A_字符串、u'B_字符串、u'C_字符串)包含在dict 1的键(u'A_字符串、u'B_字符串、u'C_字符串、u'D_字符串、u'E_字符串)中
dict 3的键(u'A_字符串'、u'B_字符串'、u'F_字符串')包含在dict 2的键(u'A_字符串'、u'B_字符串'、u'C_字符串'、u'F_字符串)中
dict 3的键(u'A_字符串'、u'B_字符串'、u'C_字符串')包含在dict 2的键(u'A_字符串'、u'B_字符串'、u'C_字符串'、u'D_字符串)中


它通过比较所有东西来工作,比较是通过转换到一个集合并进行差异处理来完成的,如果没有元素保留,元组包含在另一个中。

我不确定DICT是如何组织的,但要确定一个字典中的任何键是否“嵌套”在另一个字典的键中,可以这样检查:

dic_3_keys = dic_3.keys()
key_len = len(dic_3_keys[0])
check_keys = [k[:key_len] for k in dic_1.keys()]
for key in dic_3_keys:
    if key in check_keys:
        print key

谢谢这里的想法是让两个字典的键长度相同吗?如果你想比较它们,是的。所以我的问题是比较不同长度的键?美好的我的意思是,如果你想知道一个键是否在另一个dict中的任何一个键中都有前缀,问题是你的问题没有很好的定义,这就是我如何理解你对“嵌套”的定义。如果你能更好地定义你的问题,我可以相应地修改我的例子。我截取的代码只是一个示例,我如何查找一个键是否以我刚才描述的方式包含在另一个键中,但我不确定这是否是您想要的。我想查找键它们是其他键的子集,然后将它们与父键组合在一起。一开始我有一本字典,但我觉得把字典分成几本比较好,按照键的长度分开(可能很傻)哇!你能对排列(范围(3),2)发表评论吗?如果我有八本字典?最长键长度为8,最小键长度为1,是否需要更改参数?如果您有8个dict:permutations(范围(8),2),请尝试在for之后添加一个打印,以查看x和y是什么。代码可以与一个字典一起使用吗?要查找父键(最长长度),那么这些键是它的子集吗?我怎样才能修改代码来实现这一点呢?在dicts中放入dict两次。