2016-02-25 5 views
20

में मुख्य मान-सी जोड़ी मैं एक शब्दकोश है कि कुंजी-मान जोड़ों के रूप में कर्मचारी-प्रबंधक के होते हैं:विलय शब्दकोश

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

मैं (कर्मचारी के मालिक सभी स्तरों पर कर्मचारी-प्रबंधक के बीच संबंधों को दिखाना चाहते हैं, एक मालिक का उपयोग कर अपने मालिक के मालिक, उसके मालिक के मालिक का मालिक आदि)। वांछित आउटपुट है:

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

मैं अगले स्तर को जोड़ने के लिए एक और सशर्त बयान कर सकते हैं लेकिन यह जाने के लिए गलत तरीके से होगा:

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

यहाँ मेरी प्रयास है जो केवल प्रथम स्तर से पता चलता है इसके बारे में। मैं शब्दकोशों से बहुत परिचित नहीं हूं तो बेहतर दृष्टिकोण क्या होगा?

+0

__I'm बहुत इतना शब्दकोशों से परिचित नहीं क्या एक बेहतर दृष्टिकोण होगा __ - एक डाटाबेस – IanAuld

+0

मैं, यकीन है कि अगर किसी भी अजगर समारोह इस उद्देश्य के लिए उपलब्ध है नहीं कर रहा हूँ लेकिन मैं इस कार्यक्षमता को लागू करने के लिए ** टोपोलॉजिकल सॉर्टिंग ** का उपयोग करूंगा। – qmaruf

+1

https://en.wikipedia.org/wiki/Disjoint-set_data_structure – OozeMeister

उत्तर

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

यह अच्छी तरह से काम करता है - बहुत बहुत धन्यवाद! – user415663

+0

मुझे कहना चाहिए कि यह मिनट के विवरण के साथ एक अच्छा विचार है। ऐसे उत्तर +1 के लिए धन्यवाद। – The6thSense

+0

[जे] वाक्यविन्यास और "जबकि जे इन डी" क्या है? ऐसा लगता है कि मैं नौसिखिया हूँ। –

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"

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]) 
के रूप में शब्दकोश में कोई आइटम है

प्रिंट घ

आउटपुट:? {'a': ['b', 'd', 'f'], 'c': ['d', 'f'], 'b': ['d', 'f'], 'd': ['f']}