将元组列表排序为多个列表的最佳方法和数据结构?

2024-10-04 03:18:32 发布

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

假设我有一个这样的元组列表:

l = [('music','300','url'),('movie','400','url'),
('clothing','250','url'),('music','350','url'),
('music','400','url'),('movie','1000','url')]

我想把第一个元组中的每一个元组分成多个元组。此外,一旦分组到这些列表中,我希望新列表按第二个元素(int)进行反向排序。因此,结果是:

^{pr2}$

也许我可以放弃多个列表,创建元组列表?所以,我会得到:

sortedlist = [[('music','400','url'),('music','350','url'),('music','300','url')],
[('movie','1000','url'),('movie','400','url')],
[('clothing','250','url')]]

但即使在这种情况下,我如何让内部列表按第二个元素进行反向排序呢?在

如果我说的不对,请提一下。我还是Python的新手。谢谢!在


Tags: url元素列表排序music情况movieint
3条回答

好吧,你可以很容易地得到你的清单理解:

music = [x for x in l if x[0] == 'music']
movie = [x for x in l if x[0] == 'movie']
clothing = [x for x in l if x[0] == 'clothing']

你甚至可以把它们分类

^{pr2}$

我就用口述,就个人而言。简单的数据结构是最好的。在

from collections import defaultdict

d = defaultdict(list)
for x in l:
    d[x[0]].append(x[1:])

会给你一些类似的东西:

>>> for k,v in d.iteritems():
...:     print k, v
...:
...:
movie [('400', 'url'), ('1000', 'url')]
clothing [('250', 'url')]
music [('300', 'url'), ('350', 'url'), ('400', 'url')]

但这就是我解决所有问题的方法,所以我可能需要拓展一点。在

在这种情况下,我要做的是一本列表字典。在

things = {}

for tuple in all_tuples:
    key = tuple[0]
    if not key in things:
        things[key] = [] # Initialize empty list
    things[key].append(tuple)

然后可以使用东西.钥匙()或事物价值观()

例如

^{pr2}$

你可以这样做:

import itertools
import operator

sorted_l = sorted(l, key=lambda x: (x[0], int(x[1])), reverse=True)

print [list(g[1]) for g in itertools.groupby(sorted_l, key=operator.itemgetter(0))]

输出:

^{pr2}$

相关问题 更多 >