我有几个字典,字典键是元组。
每个字典中的键长度始终相同。
我想找到嵌套的密钥并打印出来。
字典示例:
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
答案 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