python 判断空字典_深入学习python小练习(列表、字典、循环、判断)

练习案例

下面通过一个简化的虚拟案例做一次深入学习python小练习,有某果园销售数据如下:

sell_list = [    {'客户': '张三', '种类': '苹果','数量':100},    {'客户': '李四', '种类': '苹果','数量':200},    {'客户': '李四', '种类': '香梨','数量':200},    {'客户': '李四', '种类': '香梨','数量':300},    {'客户': '张三', '种类': '苹果','数量':100},    {'客户': '王五', '种类': '香蕉','数量':500},    {'客户': '王五', '种类': '香蕉','数量':150},    {'客户': '王五', '种类': '香蕉','数量':150},    {'客户': '王五', '种类': '苹果','数量':500},    {'客户': '赵六', '种类': '葡萄','数量':300},    {'客户': '李四', '种类': '葡萄','数量':300},    {'客户': '赵六', '种类': '苹果','数量':300},]

客户希望对数据进行整理,期待得到的数据集格式类似如下这样:

result_list = [    ['张三', {'苹果': 300, '香蕉': 200, }],    ['李四', {'苹果': 100, '香蕉': 200, }],    ['王五', {'苹果': 100, '香蕉': 200, }],]
bb558e9d759480cd1416e8caf1f77131.png

果园销售数据汇总

需求分析

客户原始数据池是列表,列表元素是客户、果名、数量。现在的需求是对列表元素进行汇总,得出客户、果名、数量的汇总表。

首先遍历原始数据池,判断客户名

  • 若在数据集中客户名不存在,则数据集中添加客户名,同时将果名和数量以字典格式加入数据集。
  • 若在数据集中客户名存在,则判断果名:若在数据集中果名存在,则将数量累加。若在数据集中果名不存在,则添加果名和数量。

通过以上分析有个大致的框架,通过2层嵌套循环加判断来编写代码。

b389a5b53d3970b63a1060f2bf12edaa.png

写代码之前先进行需求分析,理清思路

具体代码

我设想的代码有2种方案:

  1. 二层循环嵌套if的列表实现方式,优点是较省内存,缺点是速度略慢:
result_list = []for i in sell_list:    for j in result_list:        if j[0] == i['客户']:            if i['种类'] not in j[1]:                j[1][i['种类']] = i['数量']            else:                j[1][i['种类']] = j[1][i['种类']] + i['数量']            break    else:        result_list.append([i['客户'], {i['种类']: i['数量'], }])for i in result_list:    print(i)out:['张三', {'苹果': 200}]['李四', {'苹果': 200, '香梨': 500, '葡萄': 300}]['王五', {'香蕉': 800, '苹果': 500}]['赵六', {'葡萄': 300, '苹果': 300}]

上述代码有一个需要特别注意的地方,循环体内break会跳过整个循环体(含循环体的else部分)。这一点很多教材都没有讲得很透彻。

  1. 单层循环嵌套if的字段实现方式,优点是速度较快,缺点是较费内存:
result_dict = {}for i in sell_list:    if i['客户'] in result_dict:        if i['种类'] not in result_dict[i['客户']]:            result_dict[i['客户']][i['种类']] = i['数量']        else:            result_dict[i['客户']][i['种类']] += i['数量']    else:        result_dict[i['客户']] = {i['种类']: i['数量']}for i, j in result_dict.items():    print(i, j)out:张三 {'苹果': 200}李四 {'苹果': 200, '香梨': 500, '葡萄': 300}王五 {'香蕉': 800, '苹果': 500}赵六 {'葡萄': 300, '苹果': 300}

在字典实现方式中看起来是比列表实现方式少了一层循环,实质上这个循环的目的在“if i['种类'] not in result_dict[i['客户']]:”这个部分已经实现了,在容器中找成员,字典是速度最快同时也是最费内存的方式。

5f8447139de2fb0a3031b01b13c3f869.png

根据需求分析,尝试多种代码实现方式,并比较优劣。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值