Python 如何重新分解这个循环嵌套字典函数? 挑战:
我最近收到一份数据摘录,其中包含文件夹名和相关子文件夹的列表。挑战在于生成一个可重用的函数,该函数可以提供唯一文件夹名称和所有嵌套子文件夹的摘要 数据源是包含两列的excel电子表格: 父:文件夹名称 子文件夹名称 注意:我使用pandas重新创建了电子表格数据,因此代码可以很容易地进行测试 创建表格: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':
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']}