2015-09-01 79 views
1

成員 我正面臨着在Python中執行以下操作的問題。我有輸入如下如何打破Python字典的輸入

Input {(1, 2): [(2,), (1,)], (1, 3): [(3,), (1,)], (2, 3): [(2,), (3,)], 
(1,): [1], (2,): [2], (3,): [3], (1, 2, 3): [(1, 2), (3,)]} 

現在輸出應該是

(1,2,3=(2),(1),(3). 

它需要檢查輸入鍵(1,2,3)和它的相應的值是[(1,2), (3)]再次在輸入數組中尋找(1,2),它發現對應於(1,2)的值是(2)和(1)。任何想法如何做到這一點。我的代碼並不完美。

我需要你的幫助。

def OptimalPartition(L=[],tempdict=dict()): 
global ret 
L=tuple(L) 
chk0=tempdict.get(L[0]) 
chk1=tempdict.get(L[1]) 
if len(tuple([chk0]))==1: 
    print(L[0]) 
    ret.append(chk0) 
else: 
    OptimalPartition(list(L[0]),tempdict) 
if len(tuple([chk1]))==1: 
    print(L[1]) 
    ret.append(chk1) 
else: 
    OptimalPartition(list(L[1]),tempdict) 

回答

0

你基本上只是想在同一個字典中無限期地解壓每個鍵值項。

這個小片段可以讓你做到這一點,格式是由你自己決定的。

d = {(1, 2): [(2,), (1,)], (1, 3): [(3,), (1,)], (2, 3): [(2,), (3,)], 
    (1,): [1], (2,): [2], (3,): [3], (1, 2, 3): [(1, 2), (3,)]} 


def unpack(d,key): 
    if len(d[key]) == 1: 
     return tuple(d[key]) 
    ret = tuple() 
    for k in d[key]: 
     if k in d: 
      ret += unpack(d,k) 
     else: 
      # This happens if the value for the key has 
      # one value, in that case we simply add that 
      # to the returning tuple 
      ret += (k,) 
    return ret 


for key in d: 
    ret = unpack(d,key) 
    print(' key, ret: ',key,', ',ret) 
+0

謝謝@zeroth。你讓我的生活更輕鬆。 –

+0

@NARAYANCHANGDER請按照stackexchange的形式,如果答案解決了您的問題,請勾選答案按鈕,並勾選您可能會感興趣或出色表達的任何問題/答案。 – zeroth

+0

我會嘗試這種方法。我會遵循這個規則@zeroth –