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

2024-04-23 08:28:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大数组,我想用它来排序。在数组中,数组中的第一项是类别,第二项是需要排序的项。例如:

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个独立的数组并从本质上对数据进行排序)。不过,我现在最关心的是分配数据的最佳方式是什么。你知道吗


Tags: 数据方法列表for排序数组item类别
3条回答

为了将数据分成每个类别的列表,字典将帮助您—它可以将单个字符串与数字列表相关联。因此,从一个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的值,然后使用list的sort方法对它们进行排序:

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

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

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

我猜你想要的是:

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。你知道吗

执行此循环时:

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()

这有用吗?你知道吗

相关问题 更多 >