合并字典中的键值对

时间:2016-02-25 06:01:24

标签: python algorithm dictionary

我有一个由员工经理组成的字典作为键值对:

{'a': 'b', 'b': 'd', 'c': 'd', 'd': 'f'}

我希望使用字典显示各级员工经理(员工的老板,老板的老板,老板老板的老板等)之间的关系。所需的输出是:

{'a': [b,d,f], 'b': [d,f], 'c': [d,f], 'd': [f] }

这是我的尝试,只显示第一级:

for key, value in data.items():
    if (value in data.keys()):
        data[key] = [value]
        data[key].append(data[value])

我可以做另一个条件语句来添加下一个级别,但这是错误的方法。我对字典不太熟悉,那么什么是更好的方法?

3 个答案:

答案 0 :(得分:11)

SELECT pr.propertyId, bu.logoName 
FROM properties as pr
LEFT JOIN builders as bu ON pr.logo_id = bu.id 

答案 1 :(得分:7)

您可以使用递归的概念:

def get_linked_list(element, hierarchy, lst):
    if element:
        lst.append(element)
        return get_linked_list(hierarchy.get(element, ""), hierarchy, lst)
    else:
        return lst

然后访问层次结构:

>>> 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']}

但是必须小心,因为如果我们在字典中有一个项"a": "a"

,这可能会进入无限循环

答案 2 :(得分:1)

x={'a': 'b', 'b': 'd', 'c': 'd', 'd': 'f'}
d={}
l=x.keys()
for i in l:
    d.setdefault(i,[])
    d[i].append(x[i])
    for j in l[l.index(i)+1:]:
        if j==d[i][-1]:
            d[i].append(x[j])

打印d

输出:{'a': ['b', 'd', 'f'], 'c': ['d', 'f'], 'b': ['d', 'f'], 'd': ['f']}