任务背景
任务来源于极客时间专栏中,《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)
本文小结
该任务练习了字典的组合及排序,利用两份列表生成了字典键值对,同时对已生成的字典按照键、值分别进行升序、降序排列尝试,并验证了效果。
参考资料