假設我們有將字符串轉換爲數字的字典。py3k:映射字典(字符串 - >數字)到列表(字符串)
如何將其轉換爲列表?假設,我們可以用空字符串''
填充未映射的數字。
這裏例如它是如何工作的:
>>> dic_into_list({'x':0, 'z':2, 'w':3})
['x', '', 'z', 'w']
假設我們有將字符串轉換爲數字的字典。py3k:映射字典(字符串 - >數字)到列表(字符串)
如何將其轉換爲列表?假設,我們可以用空字符串''
填充未映射的數字。
這裏例如它是如何工作的:
>>> dic_into_list({'x':0, 'z':2, 'w':3})
['x', '', 'z', 'w']
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']
我分享一下我目前的解決方案:(我找短,清除其他職位實現):
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
最簡單的方法是翻轉在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)]
雖然技術上O(最大(d.values)+ 1)時間複雜度,這種方法應該比我的更快。列表乘法比字典反轉簡單,並且迭代字典和索引列表比迭代列表和字典查找應該更快。我更喜歡我版本的邏輯,因爲它反映瞭如果我不受限於數據類型的限制,我會如何考慮這個問題。 – agf
@agf我同意你的意見。即使它看起來更快,謝謝你的回答,這對比較不同的解決方案是很好的:)。在稍有不同的情況下有其他原因總是很好的,你的可能會更好地進行學習。 –
@SvenMarnach再次感謝您的幫助;)。 –