Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何重新分解这个循环嵌套字典函数? 挑战:_Python_Nested_Circular Dependency - Fatal编程技术网

Python 如何重新分解这个循环嵌套字典函数? 挑战:

Python 如何重新分解这个循环嵌套字典函数? 挑战:,python,nested,circular-dependency,Python,Nested,Circular Dependency,我最近收到一份数据摘录,其中包含文件夹名和相关子文件夹的列表。挑战在于生成一个可重用的函数,该函数可以提供唯一文件夹名称和所有嵌套子文件夹的摘要 数据源是包含两列的excel电子表格: 父:文件夹名称 子文件夹名称 注意:我使用pandas重新创建了电子表格数据,因此代码可以很容易地进行测试 创建表格: import pandas as pd data = {'Parent': ['A', 'B', 'C', 'D', 'E', 'F', 'C', 'C'], 'Child':

我最近收到一份数据摘录,其中包含文件夹名和相关子文件夹的列表。挑战在于生成一个可重用的函数,该函数可以提供唯一文件夹名称和所有嵌套子文件夹的摘要

数据源是包含两列的excel电子表格:

父:文件夹名称

子文件夹名称

注意:我使用pandas重新创建了电子表格数据,因此代码可以很容易地进行测试

创建表格:

import pandas as pd

data = {'Parent': ['A', 'B', 'C', 'D', 'E', 'F', 'C', 'C'],
        'Child': ['B', 'C', 'E', 'E', 'Z', 'Z', 'B', 'A']}

df = pd.DataFrame(data)

print(df):

Parent  Child
0   A   B
1   B   C
2   C   E
3   D   E
4   E   Z
5   F   Z
6   C   B
7   C   A
我的解决方案: 结果: 反馈 我很高兴地说,在缓解了循环嵌套问题后,它可以工作,但我忍不住想,有一种更简单的方法可以做到这一点,所以我想我应该将它放在那里进行评论,以便欢迎反馈……:)


不要使用
&
,这是一个按位布尔运算符。改为使用
,这是一个逻辑运算符。例如,
1和2
0
。而且,
会短路,而
不会短路,所以效率会更高。@tomkarze知道这么大的感谢真的很有用。现在,为了更好地理解位运算符的使用……如果是有效的,您可以尝试将问题发布到。你可以在那里得到更广泛的答案…谢谢@SergeBallesta,这是我学习的好日子!!!
def relationship_dictionary(dataframe, key_column_name, values_column_name):
    """
    The key_column_name is the primary data source that should be considered the 
    start of the nested relationship.
    
    The values_column_name is the subfolder
    
    Creates a dictionary of unique relationships to each key.
    """
    
    parent = key_column_name
    child = values_column_name
​
    d = {}
    for i, row in dataframe.iterrows():
        key = row[parent]
        value = row[child]
        if key in d.keys():
            d[key].append(value)
        else:
            d[key] = [value]
        
    for k, values in d.items():
        for v in values:
            if v in d.keys():
                for each in d[v]:
                    if (each not in d[k]) and (each != k):
                        d[k].extend([each])
    return d
relationship_dictionary(df, "Parent", "Child")
{'A': ['B', 'C', 'E', 'Z'],
 'B': ['C', 'E', 'A', 'Z'],
 'C': ['E', 'B', 'A', 'Z'],
 'D': ['E', 'Z'],
 'E': ['Z'],
 'F': ['Z']}