Python对字典列表进行排序

Python对字典列表进行排序,python,Python,我有一个这样的字典列表: list = [ {'name': 'title1', 'description': 'text1'}, {'name': '[test] title2', 'description': 'text2'}, {'name': 'title3', 'description': 'text3'}, {'name': '[test] title4', 'description': 'text4'} ] 当关键

我有一个这样的字典列表:

list = [

        {'name': 'title1', 'description': 'text1'},
        {'name': '[test] title2', 'description': 'text2'},
        {'name': 'title3', 'description': 'text3'},
        {'name': '[test] title4', 'description': 'text4'}
]
当关键字“name”包含单词“[test]”时,我需要排除所有字典,然后按值“name”排序。
我该怎么做?提前感谢

您可以通过几个列表操作来解决此问题:

result=已排序(
#筛选具有名称的项目的列表
过滤器(lambda i:i中的“名称”和i[“名称”]中的“测试”,列表),
#按此名称排序
key=lambda i:i['name']
)

使用列表理解:

sorted((element for element in list if element['name'] != 'test'), key=lambda element: element.get('name'))

你尝试过什么,它到底有什么问题?请不要使用Python保留字作为变量名Max V,是的,我知道,这只是个例子。实际上你甚至不必用
list
包装
filter
,因为
sorted
接受
filter
对象。酷,我不知道。决定将其包括在内,因为无论怎样,它都会起作用。没有测试我写的代码(不管怎样,谁他妈的需要测试,duh/s),但很高兴知道。Will editJonathan,我用了你的建议,这对我很有帮助。这可能会很慢,因为列表理解首先会构建一个完整的列表。过滤器做同样的事情(但懒惰)。不过,您的想法确实适用于生成器理解,看起来是这样的:排序((如果元素['name']!=“test'),key=lambda元素:元素['name'])(注意括号而不是方括号)(是的,我知道我自己的原始解决方案也构建了一个列表。感谢Jacinator注意到这一点:)这也不起作用,因为当元素[“name”]不存在时,它将抛出一个KeyError。您需要使用“in”操作符。如果它有效的话,我宁愿用“==None”来代替。@jonathan不用“in”来代替“in”,你应该用“in”来代替。您不应该选中“==None”,它应该是“is None”。列表理解和生成器表达式通过过滤器和映射进行查询,您可以发现Guido正在谈论它,reduce从默认函数移动到functools就是一个例子。