按列表的属性对列表进行排序[重复]
Posted
技术标签:
【中文标题】按列表的属性对列表进行排序[重复]【英文标题】:Sort list by attribute of list [duplicate] 【发布时间】:2015-09-21 02:59:19 【问题描述】:我知道有几篇关于各种 python 列表的帖子,但我尝试了很多东西,但没有完成我想要的。
我的代码:
list = []
things = re.findall('<a class="th tooltip" data-rel=.*? href="(.*?)".*?> <img src="(.*?)" .*?', content, re.DOTALL)
for url, image, name in things:
list.append('url': url, 'image': image, 'name': name)
现在我想按名称对这个列表进行排序。我发现了几篇声明使用list.sort(key=)
的帖子,但我不知道我应该使用什么作为密钥。我尝试的一切都导致KeyError
。
如果我要复制已解决的帖子,我很抱歉,但我找不到合适的解决方案。
提前致谢。
【问题讨论】:
使用 lambda 函数将列表项i
映射到 i['name']
,如下所示:key=lambda i: i['name']
最好是key=operator.itemgetter('name')
。
@bereal: 更好:)
@bereal 使用 operator.attrgetter('name')
否则它不适用于不可下标的对象
@Patrick attrgetter
不能用于 dicts,这就是我们在这种情况下要处理的问题。
【参考方案1】:
使用 lambda 表达式,lambda 表达式将字典作为参数,然后您可以从字典中返回 name
元素 -
lst.sort(key=lambda x: x['name'])
另外,请不要使用list
作为变量名,它会覆盖内置的list
函数,这可能会导致尝试使用list(..)
函数时出现问题。
【讨论】:
哇,谢谢.. 我发现我在错误的地方排序,因此我得到了两个子列表作为输出排序。 THX 使用key=attrgetter('name')
以获得更好的性能(从运营商导入 attrgetter)
attrgetter
在这个中不起作用,因为我们正在使用列表中的字典。但是如果你打算将 getattr(x, 'name')
或 x.name
作为 key ,那么 attrgetter
就可以了。但是不要真的推荐尝试优化,除非你知道这部分是程序的瓶颈。以上是关于按列表的属性对列表进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章