第一篇关于python的list中包含字典的排序和过滤

本文作者:晨海旭日。原创文章,转载请注明出处。

# 定义一个list,里面的值是dict

students = [{'name':'张三','性别':'男','age':15},

{'name':'刘丽丽','性别':'女','age':25},

{'name':'李艳','性别':'女','age':35},

{'name':'王五','性别':'男','age':35},

{'name':'刘刚','性别':'男','age':17},

{'name':'李明明','性别':'男','age':19}]

# 1、输出姓名包含“李”的dict。思考:需要遍历list,还要过滤,该用什么,恩!列表表达式!

>>> print([stu for stu in students if "李" in stu["name"]])

[{'name': '李艳', '性别': '女', 'age': 35}, {'name': '李明明', '性别': '男', 'age': 19}]

# 思考:使用filter是否可行?

>>> print(list(filter(lambda x:"李" in x["name"], students)))

[{'name': '李艳', '性别': '女', 'age': 35}, {'name': '李明明', '性别': '男', 'age': 19}]

# 2、输出姓名包含“李”的姓名列表。思考:既然上步都能输出list中的字典,那取dict中的某个值不就简单了。

>>> print([stu["name"] for stu in students if "李" in stu["name"]])

['李艳', '李明明']

#思考:那filter行不行呢?自然是行的,但不简洁。

>>> print([ stu["name"] for stu in list(filter(lambda x:"李" in x["name"], students))])

['李艳', '李明明']

#思考有没有别的方法呢?也有,可以用map,但并不简洁!

>>> print([x for x in list(map(lambda stu:stu["name"], students)) if "李" in x])

['李艳', '李明明']

#3、我想输出最大的年龄怎么办。思考:应先取出所有年龄,再取最大的那个。

>>> print(max(list(map(lambda x:x["age"], students))))

35

#思考:有没有其他的办法,肯定有,不列举了。

#4、我想输出所有年龄最大的dict怎么办。思考:第三个输出了最大年龄,这个要输出对应dict。

>>> print(list(filter(lambda y:y["age"] == max(list(map(lambda x:x["age"], students))), students)))

[{'name': '李艳', '性别': '女', 'age': 35}, {'name': '王五', '性别': '男', 'age': 35}]

#又臭又长有木有,暂时没想到好方法,当然for循环是可以的。

#5、我想按年龄降序排序(35后就会很难啊!)。排序有两个方法,sort和sorted,sort是list的方法,注意该方法是对原始的list排序,返回值是None,sorted可以对很多数据类型排序。

>>> print(sorted(students, key = lambda stu:stu["age"], reverse = True))

[{'name': '李艳', '性别': '女', 'age': 35}, {'name': '王五', '性别': '男', 'age': 35}, {'name': '刘丽丽', '性别': '女', 'age': 25}, {'name': '李明明', '性别': '男', 'age': 19}, {'name': '刘刚', '性别': '男', 'age': 17}, {'name': '张三', '性别': '男', 'age': 15}]

# sort方法如何做呢?

>>> students.sort(key = lambda stu:stu["age"], reverse = True); print(students)

[{'name': '李艳', '性别': '女', 'age': 35}, {'name': '王五', '性别': '男', 'age': 35}, {'name': '刘丽丽', '性别': '女', 'age': 25}, {'name': '李明明', '性别': '男', 'age': 19}, {'name': '刘刚', '性别': '男', 'age': 17}, {'name': '张三', '性别': '男', 'age': 15}]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。