本文作者:晨海旭日。原创文章,转载请注明出处。
# 定义一个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}]