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

2023-12-07

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

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

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

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

也许我可以放弃多个列表并制作元组列表的列表?所以,我会得到:

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

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

如果我以错误的方式处理这个问题,请指出。我还是 Python 新手。谢谢!


好吧,您可以通过列表理解轻松获得列表:

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']

您甚至可以将它们分类

>>> music.sort(key=lambda x: x[1], reverse=True)
<<< [('music', '400', 'url'), ('music', '350', 'url'), ('music', '300', 'url')]

我个人只会使用字典。简单的数据结构是最好的。

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')]

但这就是我解决所有问题的方法,所以也许我需要扩展一下。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐