2015-10-19 49 views
2

有沒有一種列表理解的方式來做到以下幾點?從Python中的詞典生成間隔元組

輸出應爲:[(0,5, 'A'),(5,15, 'B'),(15,23, 'C')]

a = { 'a' : 5, 'b' : 10, 'c' : 8 } 

items = [] 

i = 0 

for k, v in a.iteritems(): 
    items.append((i, i+v, k)) 
    i += v 

print items 
+4

我很驚訝,即使在循環工作。字典是無序的。 –

+0

你如何定義'a njzk2

回答

3

有時單襯裏不太好:

items = [(sum(map(a.get, sorted(a)[:i])), sum(map(a.get, sorted(a)[:i+1])), key) for i, key in enumerate(sorted(a))] 

變與循環似乎更可讀:

items = [] 
i = 0 
for key in sorted(a): 
    items.append((i, i+a[key], key)) 
    i += a[key] 

反正你應該字典的鍵排序,因爲字典是Python中無序。