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两次。