use*_*663 20 python algorithm dictionary
我有一个由员工经理作为键值对的字典:
{'a': 'b', 'b': 'd', 'c': 'd', 'd': 'f'}
Run Code Online (Sandbox Code Playgroud)
我想用字典来展示各级员工经理(员工的老板,老板的老板,老板老板的老板等)之间的关系.所需的输出是:
{'a': [b,d,f], 'b': [d,f], 'c': [d,f], 'd': [f] }
Run Code Online (Sandbox Code Playgroud)
这是我的尝试,只显示第一级:
for key, value in data.items():
if (value in data.keys()):
data[key] = [value]
data[key].append(data[value])
Run Code Online (Sandbox Code Playgroud)
我可以做另一个条件语句来添加下一个级别,但这是错误的方法.我对字典不太熟悉,那么什么是更好的方法呢?
Joh*_*ooy 11
>>> D = {'a': 'b', 'b': 'd', 'c': 'd', 'd': 'f'}
>>> res = {}
>>> for k in D:
... res[k] = [j] = [D[k]]
... while j in D:
... j = D[j]
... res[k].append(j)
...
>>> res
{'b': ['d', 'f'], 'c': ['d', 'f'], 'd': ['f'], 'a': ['b', 'd', 'f']}
Run Code Online (Sandbox Code Playgroud)
您可以使用递归的概念:
def get_linked_list(element, hierarchy, lst):
if element:
lst.append(element)
return get_linked_list(hierarchy.get(element, ""), hierarchy, lst)
else:
return lst
Run Code Online (Sandbox Code Playgroud)
然后访问层次结构:
>>> d = {'a': 'b', 'b': 'd', 'c': 'd', 'd': 'f'}
>>> print {elem:get_linked_list(elem, d, [])[1:] for elem in d.keys()}
>>> {'a': ['b', 'd', 'f'], 'c': ['d', 'f'], 'b': ['d', 'f'], 'd': ['f']}
Run Code Online (Sandbox Code Playgroud)
但是必须小心,因为如果我们在字典中有一个项目,这可能会进入无限循环 "a": "a"