Python世界:将两个列表合成字典并排序任务实践
- 任务背景
- 代码实现
- 人工编码
- Copilot AI 编码
- 一行代码实现
- 多行代码实现
- 问题进阶
- 本文小结
任务背景
任务来源于极客时间专栏中,《Python核心技术与实战》第4章字典、集合,你真的了解吗?课后问题:
给定下面两个列表attributes和values,要求针对values中每一组子列表value,输出其和attributes中的键对应后的字典,最后返回字典组成的列表。
attributes = ['name', 'dob', 'gender'] values = [['jason', '2000-01-01', 'male'], ['mike', '1999-01-01', 'male'], ['nancy', '2001-02-01', 'female'] ] # expected output: [{'name': 'jason', 'dob': '2000-01-01', 'gender': 'male'}, {'name': 'mike', 'dob': '1999-01-01', 'gender': 'male'}, {'name': 'nancy', 'dob': '2001-02-01', 'gender': 'female'}]
你能分别用一行和多行条件循环语句,来实现这个功能吗?
代码实现
人工编码
自己尝试了实现下:
attributes = ['name', 'dob', 'gender']
values = [ ['jason', '2000-01-01', 'male'], ['mike', '1999-01-01', 'male'],['nancy', '2001-02-01', 'female']]# 生成字典键值对,多重循环
dict_list = [] # 列表
for i, val in enumerate(values):dict_name = {} # 字典for j, att in enumerate(attributes):dict_name[att] = val[j] # 增加键值对dict_list.append(dict_name)
print(dict_list)
但是对一行代码解决该问题,还有点摸不着头脑。
于是,我将问题原封不动,问了AI Copilot,它给了我很好的答案:
Copilot AI 编码
当然可以!我们可以分别用一行和多行的条件循环语句来实现这个功能。
一行代码实现
result = [dict(zip(attributes, value)) for value in values]
多行代码实现
result = []
for value in values:item = {}for i in range(len(attributes)):item[attributes[i]] = value[i]result.append(item)
这两种方法都会生成你期望的输出:
[{'name': 'jason', 'dob': '2000-01-01', 'gender': 'male'}, {'name': 'mike', 'dob': '1999-01-01', 'gender': 'male'}, {'name': 'nancy', 'dob': '2001-02-01', 'gender': 'female'}]
希望这对你有帮助!如果你有其他问题,随时告诉我。 😊
问题进阶
任务依然来自于该专栏,[10 简约不简单的匿名函数](https://learn.lianglianglee.com/专栏/Python核心技术与实战/10 简约不简单的匿名函数.md):
第一问:如果让你对一个字典,根据值进行由高到底的排序,该怎么做呢?以下面这段代码为例,你可以思考一下。
d = {'mike': 10, 'lucy': 2, 'ben': 30}
参考示例如下:
d = {'mike': 10, 'lucy': 2, 'ben': 30}# 根据字典值的升序排序
d_sorted_by_value = sorted(d.items(), key=lambda x: x[1]) # 若元素为数值,在x[1]前添加负号也可,降序排序
print(d_sorted_by_value)# 根据字典值的降序排序
d_sorted_by_value = sorted(d.items(), key=lambda x: x[1], reverse=True) # 默认按升序排,reverse入参默认是False,如果要降序,则reverse=True
print(d_sorted_by_value)# 根据字典键的升序排序
d_sorted_by_value = sorted(d.items(), key=lambda x: x[0])
print(d_sorted_by_value)# 根据字典键的降序排序
d_sorted_by_value = sorted(d.items(), key=lambda x: x[0], reverse=True)
print(d_sorted_by_value)
本文小结
该任务练习了字典的组合及排序,利用两份列表生成了字典键值对,同时对已生成的字典按照键、值分别进行升序、降序排列尝试,并验证了效果。
参考资料
- zip功能解释:将两个列表组成元组对
- 如何按值对 Python 字典进行排序
- python 按照字典value值进行降序排序