如何在python中的列表中访问和排序列表?

时间:2012-09-25 01:46:09

标签: python list

我有一个大型数组,我想对其进行排序。在数组中,数组中的第一项是类别,第二项是需要排序的项。例如:

joe = [['miles', 330], ['points', 5000], ['miles', 400], ['points', 4000], ['trophy', 'explorer'], ['points', 4100]]

我一直在尝试不同的方式来访问列表中的列表,但我不确定如何才能完全执行此操作。我如何访问这些信息?

我尝试过各种变体:

mylist = []
for item in joe:
    category = mylist(item[0])
    print category

之后我会将这些值分配给不同的数组(我应该有3个独立的数组并基本上对这些数据进行排序)。我现在主要关心的是分配数据的最佳方法是什么。

3 个答案:

答案 0 :(得分:4)

我猜你想要的东西是:

new_joe = sorted( joe,key = lambda x: x[1] )

与效率略高一样:

from operator import itemgetter
new_joe = sorted( joe, key = itemgetter(1) )

或者,您可以对joe进行排序:

joe.sort(key=lambda x: x[1])

但是,如果您希望将所有'miles'列表放在一起,然后在此之后按升序排序,该怎么办?

joe.sort()

应该做的伎俩...(现在,希望我已经覆盖了足够的基础,我点击了你需要的那个。)


啊,现在我明白了你的意思。为此,你有很多选择。我最喜欢的是collections.defaultdict

from collections import defaultdict
d = defaultdict(list)
for k,v in joe:
   d[k].append(v)

for k,v in d.items():
   print(k,v)

但另一种选择是对joe进行排序(例如joe.sort())并使用itertools.groupby

答案 1 :(得分:1)

要将数据分成每个类别的列表,字典将帮助您 - 它可以将单个字符串与数字列表相关联。因此,从一个dict开始,将所有类别与空列表相关联 - my_dict = {'miles': [], 'points': []}等,并迭代列表 - 在每个项目中,您希望将数字附加到与字符串关联的列表中:

for item in joe:
    category = item[0]
    my_dict[category].append(item[1])

您可以使用dict的setdefault方法避免硬编码(或预先计算)所有类别以放入dict:

my_dict = {}
for item in joe:
   category = item[0]
   my_dict.setdefault(category, []).append(item[1])

要对每个列表进行排序,您可以迭代dict的值并使用列表的sort方法对它们进行排序:

for category in my_dict:
   my_dict[category].sort()

这会给你一个my_dict看起来像:

{'trophy': ['explorer'], 'miles': [330, 400], 'points': [4000, 4100, 5000]}

答案 2 :(得分:1)

执行此循环时:

for item in joe:

item看起来像什么?无需猜测,您可以打印出来:

for item in joe:
    print item

显然,item是主列表中的每个子列表,第一个是['miles', 330]

现在你如何得到'miles'item[0],对吧? item[1]将是330

现在,您可以根据类别轻松构建新列表。我们将这些存储在字典中。

joedict = {}
for item in joe:
    joedict.setdefault(item[0], []).append(item[1])

现在joedict['miles']是所有里程的列表,依此类推。

要对每一项进行排序很简单:

for value in joedict.itervalues():
    value.sort()

这有帮助吗?