Python 父子图字典

标签 python dictionary

我在构建父子标志字典时遇到了困难。

我有一本这样的字典:

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]

DC 的孙子,应该有一个 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/

相关文章:

java - 为什么这个 Memoized Fibonacci 的实现不起作用?

c# - 词典 - 添加注释以驱动智能感知

python - close() 从不关闭 pymongo 中的连接?

python - 有一种通过按键检查 QCheckBox 的方法吗?

python - 将 JSON 数组转换为 Python 列表

python - 词典理解和创建过程中的键检查

python - 使用包含索引的字典填充 NumPy 数组

arrays - Swift 3 - 扩展 Dictionary<String, Any> 数组

python - 使用opencv-python从Mightex USB摄像机捕获图像

python - 使用 Python 通过流将数据从 FTP 服务器传输到 S3 时出现问题