【Dict】python字典(dict)使用秘籍

一、字典常见形式

字典中,键key只能是不可变数据类型,而值value可为任意数据类型(字符串、数字、列表、字典等),例如:

在这里插入图片描述

studentinfos={'student':{'sid':'53231323','sname':'jack','age':25},
              'course':['math','chinese','english'],
              'class':'高三6班',
              'hobby':'basketball',
              'score':98
            }

二、基本操作

2.1新增
stu_dict1={'sid':'201406','sname':'cheng'}

stu_dict1['age']=24
# 没有此键值对时,则添加(增),有此键值对时,则覆盖(改)
stu_dict1.setdefault('height') # value不填时,默认为None
stu_dict1.setdefault('score',95)
# 有此key时,键值对不改变,无此key时,则添加(增)<br>
print(stu_dict1)
#{'sid': '201406', 'sname': 'cheng', 'age': 24, 'height': None, 'score': 95}
2.2删除
stu_dict1.pop('score')  # 删除'score'键值对,有返回值,为value,此处为95
stu_dict1.pop('score', '不存在此键')  # 添加一个返回值,防止不存在此key而报错,此处返回值为字符串‘不存在此键’
# 常用于不知道是否存在key的情况,防止程序报错而停止运行

stu_dict1.popitem()  # 随机删,删除键值对,返回元组
stu_dict1.clear()  # 清空字典

# del stu_dict1['score']  # 删除score键值对,但不存在时会报错
# del stu_dict1  # 删除字典
2.3修改
stu_dict1={'sid':'201406','sname':'cheng'}

#修改key对应的value
stu_dict1['sname']='jack'
print(stu_dict1)  #{'sid': '201406', 'sname': 'jack'}
2.4查找
dic={'sid':'201406','sname':'cheng'}

dic.keys()  # 所有的键,返回值为列表
dic.values()  # 所有的值,返回值为列表
dic.items()  # 所有的键值对,返回值为包含元组的列表,一个键值对为一个元组

# for循环逐个查看
for i in dic:  # 只写dic时,默认查看key,故此处用dic.keys()时,结果一样
    print(i)  # 循环打印key
for i in dic.values():
    print(i)  # 循环打印value
for i in dic.items():
    print(i)  # 循环打印键值对,显示为元组,如:('name','mumu')
for k, v in dic.items():
    print(k, v)  # 循环打印键值对,键、值独立
 
# print(dic['key'])  # 没有此key则会报错
print(dic.get('key', '无此键'))  # 无key时,返回值为字符串'无此键'

三、类型转换

使用json.dumps()和json.loads()实现字典、字符串类型转换
3.1 字典—>字符串转换:json.dumps()用于将字典形式的数据转化为字符串
举例代码:

import json
studentinfos={'student':{'sid':'53231323','sname':'jack','age':25},
              'course':['math','chinese','english'],
              'class':'高三6班',
              'hobby':'basketball'}


print('类型信息')
print(type(studentinfos))#<class 'dict'>
print(studentinfos)      #{'student': {'sid': '53231323', 'sname': 'jack', 'age': 25}, 'course': ['math', 'chinese', 'english'], 'class': '高三6班', 'hobby': 'basketball'}
#字典转化为字符串
dict2str=json.dumps(studentinfos)
print(type(dict2str))    #<class 'str'>
print(dict2str)          #{"student": {"sid": "53231323", "sname": "jack", "age": 25}, "course": ["math", "chinese", "english"], "class": "\u9ad8\u4e096\u73ed", "hobby": "basketball"}

3.2 字符串—>字典转换:json.loads()用于将字符串形式的数据转化为字典
举例代码:

import json
studentinfos={'student':{'sid':'53231323','sname':'jack','age':25},
              'course':['math','chinese','english'],
              'class':'高三6班',
              'hobby':'basketball'}

print('类型信息')
print(type(studentinfos))
print(studentinfos)   

#字典转化为字符串
dict2str=json.dumps(studentinfos)
print(type(dict2str))    
print(dict2str)        

#将字符串转化为字典
str2dict=json.loads(dict2str)
print(type(str2dict))
print(str2dict)
运行结果:

运行结果
小提示: json.dump() 和 json.load() 来编码和解码JSON数据,用于处理文件。

with open('test.json', 'w') as f:
    json.dump(data, f)
 
with open('test.json', 'r') as f:
    data = json.load(f)

四、字典排序

使用sorted()函数对字典进行排序

sorted(dic,value,reverse)

  • dic为比较函数,value 为排序的对象(这里指键或键值),
  • reverse:注明升序还是降序,True–降序,False–升序(默认)
4.1 按照键升序排序
dic = {'a':3 , 'c':2 , 'b': 1,'d':10}

#字典按键排序
dic1=sorted(dic)
print(dic1) #['a', 'b', 'c', 'd']
4.2 按照值(value)升序排序
dic = {'a':3 , 'c':2 , 'b': 1,'d':10}

#默认按值(value)升序排序
dic2=sorted(dic.items(),key=lambda x:x[1])
print(dic2) #[('b', 1), ('c', 2), ('a', 3), ('d', 10)]
4.3 按照值(value)降序排序
dic = {'a':3 , 'c':2 , 'b': 1,'d':10}

#按值(value)降序排列
dic3=sorted(dic.items(),key=lambda x:x[1],reverse=True)
print(dic3) #[('d', 10), ('a', 3), ('c', 2), ('b', 1)]
4.4 用itemgetter进行多维排序
from operator import itemgetter
# 进行排序,要用itemgetter进行多维排序
line_list_new = sorted(line_list_new, key=itemgetter('流水线成熟度', '流水线构建时间'), reverse=True)
note:充电知识-两个函数

1.lambda

功能: 创建匿名函数

区别: 和def函数定义,以下两点区别

  • lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符;而def则会把函数对象赋值给一个变量
  • lambda它只是一个表达式,而def则是一个语句
    案例:
    在这里插入图片描述
    2.iteritems()

功能: iteritems()以迭代器对象返回字典键值对

区别: 和item相比:items以列表形式返回字典键值对

案例:
在这里插入图片描述
注释: 在函数sorted(dic.iteritems(), key = lambda asd:asd[1])中,第一个参数传给第二个参数“键-键值”,第二个参数取出其中的键([0])或键值(1])

五、字典的缺点和解决方案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值