2011-02-22 121 views
0

排序我有一個python字典如迭代過蟒字典由元件

{ 
    'FOUR': 
    [['emit', 'build', 'simulate'], 'TestFour', 2], 
    'HELLO': 
    [['emit', 'build', 'simulate'], 'TestThree', 1] 
} 

如何可以遍歷基於所述數1,2的元素?我的意思是,我怎樣才能得到'你好'(1),然後'四'(2)?

回答

4
for x in sorted(d, key=lambda x:d[x][2]): 
    print x 

這將打印

HELLO 
FOUR 
+0

+1因爲發帖比我快。 :) – 2011-02-22 22:35:10

+0

@Steven,只有一個頭發:) – senderle 2011-02-22 22:36:30

+0

你需要那裏的'.keys()'嗎? – Gabe 2011-02-23 06:57:04

2

如果d是你的字典:

for k in sorted(d.keys(), key=lambda k, d=d: d[k][2]): 
    ... 

這是如何工作的?首先,我們需要特定順序的密鑰,因此我們使用sorted內置函數。 「sorted」取key參數「指定用於從每個列表中提取比較關鍵字的一個參數的函數」。這裏提供的lambda使用該鍵從相應的值中檢索第三個項目,然後用它對鍵進行排序。

+0

原諒我的無知:爲什麼在'lambda'語句中將'd'作爲默認參數傳遞? – senderle 2011-02-22 22:37:53

+0

@senderle:不需要。這是從Tkinter回調書寫大量lambda表達式的擱置,他們從不同的範圍調用它們。 – 2011-02-22 22:44:14

0
my_list = (t[1] for t in sorted([(v[2],k) for k,v in my_dict.iteritems()])) 
list(my_list) == ['HELLO', 'FOUR']