2011-11-02 100 views

回答

3
d = {'x':0, 'z':2, 'w':3} 
lst = [""] * (max(d.values()) + 1) 
for k, v in d.items(): 
    lst[v] = k 
print(lst) 

打印

['x', '', 'z', 'w'] 
+0

雖然技術上O(最大(d.values)+ 1)時間複雜度,這種方法應該比我的更快。列表乘法比字典反轉簡單,並且迭代字典和索引列表比迭代列表和字典查找應該更快。我更喜歡我版本的邏輯,因爲它反映瞭如果我不受限於數據類型的限制,我會如何考慮這個問題。 – agf

+0

@agf我同意你的意見。即使它看起來更快,謝謝你的回答,這對比較不同的解決方案是很好的:)。在稍有不同的情況下有其他原因總是很好的,你的可能會更好地進行學習。 –

+0

@SvenMarnach再次感謝您的幫助;)。 –

0

我分享一下我目前的解決方案:(我找短,清除其他職位實現):

def dic_into_list(dic): 
    maxindex = max([v for i,v in dic.items()]) 
    dicrev = {num:name for name,num in dic.items()} 
    l=[] 
    for i in range(0,maxindex+1): 
     if i in dicrev: 
      l.append(dicrev[i]) 
     else: 
      l.append('') 
    return l 
+0

你應該表現出的問題你的代碼,而不是。 – poke

+0

@poke不一定;畢竟這個問題的答案是有效的,如果沒有其他人提出更好的答案,他可以將其標記爲接受。 – agf

1

最簡單的方法是翻轉在dict然後重複最多的dict最大值(現在的關鍵):

original = {'x':0, 'z':2, 'w':3} 
d = dict((v, k) for k, v in original.iteritems()) 
print [d.get(i, '') for i in range(max(d) + 1)] 
相關問題