Python世界:将两个列表合成字典并排序任务实践

任务背景

任务来源于极客时间专栏中,《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)

本文小结

该任务练习了字典的组合及排序,利用两份列表生成了字典键值对,同时对已生成的字典按照键、值分别进行升序、降序排列尝试,并验证了效果。

参考资料

  1. zip功能解释:将两个列表组成元组对
  2. 如何按值对 Python 字典进行排序
  3. python 按照字典value值进行降序排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值