在字典中查找嵌套键

时间:2016-01-05 14:43:47

标签: 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_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

2 个答案:

答案 0 :(得分:3)

编辑:快速阅读问题,这是一个回答它的编辑。

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_String',u'B_String',u'C_String',u'D_String')包含在键中(u'A_String',u'B_String',u'C_String',u'字典1的D_String',u'E_String')   dict 2的键(u'A_String',u'B_String',u'C_String',u'F_String')包含在键中(u'A_String',u'B_String',u'C_String',u'D_String',字典1的u'F_String')   dict 3的键(u'A_String',u'B_String',u'F_String')包含在键中(u'A_String',u'B_String',u'C_String',u'D_String',u'F_String') dict 1   dict 3的键(u'A_String',u'B_String',u'C_String')包含在键中(u'A_String',u'B_String',u'C_String',u'D_String',u'E_String') dict 1   dict 3的键(u'A_String',u'B_String',u'F_String')包含在dict 2的键(u'A_String',u'B_String',u'C_String',u'F_String')中/>   dict 3的键(u'A_String',u'B_String',u'C_String')包含在dict 2的键(u'A_String',u'B_String',u'C_String',u'D_String')中

它通过比较所有内容来工作,比较是通过强制转换为集合并完成差异,如果没有元素保留,则元组包含在另一个元素中。

答案 1 :(得分:1)

我不确定你的词汇是如何组织的,但是要查找一个字典中的任何键是否嵌套"在另一个字典的键内,你可以这样检查:

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
相关问题