一、字典常见形式
字典中,键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])