2014-03-05 133 views
0

從列表中n個最大的項目我有一個看起來像這樣的列表 -獲取蟒蛇

data = [[u'Alabama', 290060.0, 694020.0, 1452300.0, 1.093, 4.007, u'US-AL'], [u'Alaska', 46400.0, 160760.0, 300840.0, 0.871, 5.484, u'US-AK'], [u'Arizona', 320320.0, 1017020.0, 2234400.0, 1.197, 5.976, u'US-AZ'], [u'Arkansas', 295280.0, 535040.0, 896900.0, 0.6759999999999999, 2.0380000000000003, u'US-AR']] 

注 - 列表中包含數據,所有50個州。從這個角度來看,我希望通過NOFU2008獲得前十名的10個州。我希望數據看起來像這樣 -

data2008 - [[u'Alabama', 290060.0], [u'Alaska', 46400.0], [u'Arizona', 320320.0], [u'Arkansas', 295280.0]] 

注 - data2008只是一個例子。我想要NOFU2008最高的州。

+0

請告訴我NOFU2008? – shaktimaan

+0

考慮[heapq](http://docs.python.org/2/library/heapq.html)。 – kojiro

+0

它是一個整數字段。沒有facebook用戶。 – newbie

回答

1
[state[0:2] for state in heapq.nlargest(10, data, operator.itemgetter(1))] 

這就是「官方」的答案。要選擇50個州中的10個,heapq.nlargestsorted之間的差異可能不是什麼大不了的。所以,你可以去:

data.sort(key=operator.itemgetter(1), reverse=True) 
[state[0:2] for state in data[0:10]] 
+0

「heapq.nlargest」的前2個參數的順序被交換。 – falsetru

+0

@falsetru:謝謝。使用'sort'的另一個原因是,我可以記住參數的名稱而不需要查看任何東西;-) –

0

從我從這個問題明白,「NOFU」是在國家的名稱後,列表中的第二個元素。在這種情況下,這是你想要什麼:

res = [[item[0], item[1]] for item in data] 
print sorted(res, key=lambda x: x[1], reverse=True)[:10] 

由於至多列表中的元素的數量將是50,我認爲這將是足夠的效率。

0

一個非常簡單的方法來計算的話是:

data2008 = [stShort[0:2] for stShort in sorted(data, key=lambda stLine: stLine[1], reverse=True)][0:10]