我在构建父子标志字典时遇到了困难。
我有一本这样的字典:
d = {
'A': ['Blue'],
'B': ['A'],
'C': ['A'],
'D': ['C'],
}
这是我的逻辑或思维过程:如果一个键是'Blue'
,那么它就是父键,并获得一个0
标志。如果值
位于d.keys()
中,则它会获得一个1
标志。我陷入困境的是孙子们。这是我现在拥有的代码,是我用头撞墙上几个小时的结果。
level = 0
while level < 1000:
for key, value in d.items():
if value[0] == 'Set':
if len(value) == 1:
value.extend([level])
elif len(value) >= 2:
continue
elif value[0] in d.keys():
value.extend([level])
level += 1
结果是:
A: ['Blue', 0]
B: ['A', 1]
C: ['A', 2]
D: ['D', 3]
D
是 C
的孙子,应该有一个 2
标志,而 C
是一个子代A
的值,应为 2
,就像另一个子项 B
一样。
这样做的目的是创建正确的标志,无论有多少个孙子或曾孙级别。
这里的大局是使用这些数据来插入嵌套循环。我有一个奇怪的数据库,必须使用某个专有模块来迭代通过类属性提供给我的查找表。所以,代码将是
while parent:
...block of code for parent...
...insert same structure here if not the parent...
...statement at end of parent block...
因此,子循环可能如下所示:
while parent:
...block of code for parent...
while child:
...block of code for child...
...variable for block insertion...
...statement at end of child block...
...statement at end of parent block...
...父/子 block 末尾的语句...
与 next()
类似,但使用我需要为此使用的专有模块。
因此,映射器将用于让程序知道使用此结构创建多少个嵌套 while 循环。我还没有插入嵌套 block ,但我知道这是可以做到的。 :)
我很想向能够解释如何创建映射器部分的人学习。
谢谢!
最佳答案
此代码修改现有的子:父字典,将深度标志添加到每个列表的末尾。无论键按什么顺序处理,它都可以正常工作(在 Python 2 和 Python 3 中)。在 Python 3.6 之前的版本中,字典不一定保留键的插入顺序,并且键顺序可以从一开始更改程序运行到下一个。因此,我对条目进行了一些打乱,以确保它的行为符合预期。
src = {
'D': ['C'],
'B': ['A'],
'A': ['Blue'],
'C': ['A'],
}
def get_depth(d, k):
v = d[k]
if len(v) == 2:
return v[1]
else:
parent = v[0]
depth = 0 if parent == 'Blue' else get_depth(d, parent) + 1
v.append(depth)
return depth
for k in src:
get_depth(src, k)
print(src)
Python 3.6 输出
{'D': ['C', 2], 'B': ['A', 1], 'A': ['Blue', 0], 'C': ['A', 1]}
关于Python 父子图字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52389918/