python字典类型做数据处理_Python-数据类型之字典

一: 概述

字典是有大括号,逗号分隔,有k/v组成

字典的键必须hashable,如数字,字符串,布尔值,元组

二: 操作

2.1 增

2.1.1  直接赋值

如果键不存在,则增加

dic = {'name': 'wangys','age': 18}

dic['sex'] = 'male'

print(dic)

# {'name': 'wangys', 'age': 18, 'sex': 'male'}

如果键存在,则修改

dic = {'name': 'wangys','age': 18}

dic['name'] = 'wc'

print(dic)#{'name': 'wc', 'age': 18}

2.1.2 sedefault

如果键不存在,则增加

dic = {'name': 'wangys','age': 18}

dic.setdefault('sex','male')print(dic)#{'name': 'wangys', 'age': 18, 'sex': 'male'}

如果键存在,不过做更改

dic = {'name': 'wangys','age': 18}

dic.setdefault('name','wc')print(dic)#{'name': 'wangys', 'age': 18}

2.2 删

2.2.1 pop

如果键存在,则删除这个k/v

返回值为删除键的value值

dic = {'name': 'wangys','age': 18}

ret= dic.pop('age')print(ret)print(dic)#18#{'name': 'wangys'}

如果键不存在,则报错 KeyError

dic = {'name': 'wangys','age': 18}

ret= dic.pop('male')print(ret)print(dic)#KeyError: 'male'

2.2.2 del

键如果存在,则删除

如果不存在,则包错 KeyError

dic = {'name': 'wangys','age': 18}del dic['name']print(dic)del dic['male']print(dic)#{'age': 18}#KeyError: 'male'

2.2.3 clear

dic = {'name': 'wangys','age': 18}

dic.clear()print(dic)#{}

2.2.4 popitem

随机删除一个元素

返回值为kv组成的元祖

dic = {'name': 'wangys','age': 18}print(dic.popitem())print(dic)

# ('age', 18)

# {'name': 'wangys'}

2.3 改

2.3.1  直接修改

dic = {'name': 'wangys','age': 18}

dic['name'] = 'wc'

print(dic)#{'name': 'wc', 'age': 18}

2.3.2 update

两个字典合并

如果键冲突,则更新,如果不冲突则增加

dic1 = {'name': 'wangys','age': 18}

dic2= {'name': 'wc','sex': 'male'}

dic1.update(dic2)print(dic1)#{'name': 'wc', 'age': 18, 'sex': 'male'}

2.4 查

2.4.1 直接查

如果键不存在,则报错,KeyError

dic1 = {'name': 'wangys','age': 18}print(dic1['name'])#wangys

dic1 = {'name': 'wangys','age': 18}print(dic1['male'])#KeyError: 'male'

2.4.2 get

如果不存在,则返回None,也可以指定返回值

dic1 = {'name': 'wangys','age': 18}

ret1= dic1.get('name')

ret2= dic1.get('male')

ret3= dic1.get('male','改键不存在')print(ret1,ret2,ret3)#wangys None 改键不存在

2.4.3 setdefault

name = {'name': 'wangys','age': 18}print(name.setdefault('name'))

# wangys

三: 其他操作

3.1 for 循环

得到的是key

for循环字典时不允许对字典进行增删

dic1 = {'name': 'wangys','age': 18}for item indic1:print(item)#name#age

# 直接删除字典中的元素会报错

dic = {'k1':1,'k2':2}for el indic:

dic.pop(el)#RuntimeError: dictionary changed size during iteration

3.2  keys

返回值是由key组成的特殊列表

是可迭代的,可以被for循环

dic1 = {'name': 'wangys','age': 18}

ret=dic1.keys()print(ret)#dict_keys(['name', 'age'])

dic1 = {'name': 'wangys','age': 18}

ret=dic1.keys()for key inret:print(key)

3.3 values

返回值是由values值组成的特殊列表

是可迭代的,可以被for循环

dic1 = {'name': 'wangys','age': 18}

ret=dic1.values()print(ret)#dict_values(['wangys', 18])

3.4 items

是有key value组成的小元组后再次组成一个特殊列表,可迭代,可以被for循环

dic1 = {'name': 'wangys','age': 18}

ret=dic1.items()print(ret)#dict_items([('name', 'wangys'), ('age', 18)])

四: 练习题

# 将 s = 'k1:1|k2:2|k3:3' 改为{'k1': 1, 'k2': 2, 'k3': 3}

s = 'k1:1|k2:2|k3:3'new_list= s.split('|')

dic={}for item innew_list:

k,v= item.split(':')

dic[k]=int(v)print(dic)

# li中的数字,如果大于66 就加入k1的列表中,否则添加到k2的列表中

li = [11,22,33,44,55,66,77,88,99,90]

dic= {'k1': [],'k2': []}for item inli:if item == 66:continue

elif item > 66:

dic.setdefault('k1').append(item)else:

dic.setdefault('k2').append(item)print(dic)

# 打印序号,商品名称,价格

用户选择序号,打印商品名和价格

选择q,退出

goods =[

{'name': '电脑','price': '10000'},

{'name': '手表','price': '2000'},

{'name': '衬衣','price': '180'},

{'name': '裤子','price': '3000'},

]while 1:for index in range(1,len(goods)+1):print(index,goods[index-1]['name'],goods[index-1]['price'])

choice= input('请输入序号:').strip()if choice.upper() == 'Q':break

elif choice andchoice.isdigit():

choice=int(choice)if choice >0 and choice <=len(goods):print(goods[choice-1]['name'],goods[choice-1]['price'])else:print('请输入范围内的序号')else:print('请输入正确的序号')

字典数据操作实例

对字典列表排序及字典列表最小最大值

rows =[

{'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},

{'fname': 'David', 'lname': 'Beazley', 'uid': 1002},

{'fname': 'John', 'lname': 'Cleese', 'uid': 1001},

{'fname': 'Big', 'lname': 'Jones', 'uid': 1004}

]from operator importitemgetterimportpprint

rows_by_fname= sorted(rows, key=lambda x: x['fname'])

rows_by_fname_ir= sorted(rows, key=itemgetter('fname'))

min_item= min(rows, key=itemgetter('fname'))

max_item= max(rows, key=itemgetter('fname'))

pprint.pprint(rows_by_fname)

pprint.pprint(rows_by_fname)print(min_item)print(max_item)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值