我有一个看起来像这样的列表 -
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个州的数据。从此我想得到10个州的NOFU2008前十名。我希望数据看起来像这样 -
data2008 - [[u'Alabama', 290060.0], [u'Alaska', 46400.0], [u'Arizona', 320320.0], [u'Arkansas', 295280.0]]
注意 - data2008只是一个例子。我想要NOFU2008最高的州。
答案 0 :(得分:1)
[state[0:2] for state in heapq.nlargest(10, data, operator.itemgetter(1))]
这是“官方”答案。要选择50个州中的10个州,heapq.nlargest
和sorted
之间的差异可能不是什么大问题。所以你可以选择:
data.sort(key=operator.itemgetter(1), reverse=True)
[state[0:2] for state in data[0:10]]
答案 1 :(得分:0)
根据我对问题的理解,“NOFU”是州名后的第二个元素。在这种情况下,这就是你想要的:
res = [[item[0], item[1]] for item in data]
print sorted(res, key=lambda x: x[1], reverse=True)[:10]
由于列表中的元素数量最多为50,我认为这样就足够了。
答案 2 :(得分:0)
一种非常简单的计算方法是:
data2008 = [stShort[0:2] for stShort in sorted(data, key=lambda stLine: stLine[1], reverse=True)][0:10]