9 字典
9.1 字典定义及相关操作
- 字典概念
- 什么是可变和不可变数据类型?
- 字典的定义
- 字典的操作
code:
# *******************************************************************
"""
字典:也是一种数据的集合,由键值对组成的数据集合,字典中的键不能重复
字典中的键必须是不可变的数据类型,常用的键主要是:字符串、整型
什么是可变和不可变数据类型?
不可变数据类型: 当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变。字符串、数字、元组。
可变数据类型:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变。列表、字典、集合。
字典的定义:
1.字典可以通过将以逗号分隔的 键: 值 对列表包含于花括号之内来创建
2.通过dict()函数来创建
3.dict()函数强制类型转换---列表或元组,并且是二级容器才可以转换
4.zip()压缩函数,dict转类型
字典的操作:
+---字典不能相加 not allowed
*---字典不能相乘 not allowed
获取元素 allowed
修改元素 allowed---修改value,不能修改键值
删除元素 allowed---del keyword
添加元素 allowed---如果添加元素与其他键值重复的话,就会用新的数据覆盖旧的数据
in---检测键值是否存在,存在返回True,不存在返回False
not in---检测键值是否不存在,存在返回False,不存在返回True
len(dict)---计算长度(有多少键值对)
dict.keys()---获取所有的键值--返回键值组成的列表
dict.values()---获取所有的value---返回value组成的列表
dict.items()---获取所有的键值对 key and value
"""
print("字典定义***********************************************")
dictvar = {'a':1,'b':2}
print(f"dictvar = {dictvar},type(dictvar) = {type(dictvar)}")
dictvar1 = dict(name="Jasmine",sex="man",year=22)
print(f"dictvar1 = {dictvar1},type(dictvar1) = {type(dictvar1)}")
listvar = [[1,2],[2,3],[3,4]]
dictvar2 = dict(listvar)
print(f"dictvar2 = {dictvar2},type(dictvar2) = {type(dictvar2)}")
varlist1 = [1,2,3,4]
varlist2 = ['a','b','c','d']
var = zip(varlist1,varlist2)
dictvar3 = dict(var)
print(f"dictvar3 = {dictvar3},type(dictvar3) = {type(dictvar3)}")
print("字典操作***********************************************")
dictvardata = {'name':"Jasmine",'class':"human",'sex':"girl","year":"22"}
print(f"dictvardata = {dictvardata},type(dictvardata) = {type(dictvardata)}")
print(f"dictvardata['name'] = {dictvardata['name']}")
dictvardata['name'] = 'lily' # 更新元素
print(f"dictvardata = {dictvardata},type(dictvardata) = {type(dictvardata)}")
del dictvardata['class'] # 删除元素
print(f"dictvardata = {dictvardata},type(dictvardata) = {type(dictvardata)}")
dictvardata['math'] = '99' # 添加元素
print(f"dictvardata = {dictvardata},type(dictvardata) = {type(dictvardata)}")
print(f"'math' in dictvardata = {'math' in dictvardata}") # in
print(f"'math' not in dictvardata = {'math' not in dictvardata}") # not in
print(f"len(dictvardata) = {len(dictvardata)}") # len()
print(f"dictvardata.keys() = {dictvardata.keys()}") # keys()
print(f"dictvardata.values() = {dictvardata.values()}") # values()
print(f"dictvardata.items() = {dictvardata.items()}") # items()
for k,v in dictvardata.items(): # items()应用
print(k,v,end=' ')
运行结果:
E:\Programs_Way\Python\python.exe D:/Prj/Python/Study_Basic_Grammar/_43dict_definition_operation.py
字典定义***********************************************
dictvar = {'a': 1, 'b': 2},type(dictvar) = <class 'dict'>
dictvar1 = {'name': 'Jasmine', 'sex': 'man', 'year': 22},type(dictvar1) = <class 'dict'>
dictvar2 = {1: 2, 2: 3, 3: 4},type(dictvar2) = <class 'dict'>
dictvar3 = {1: 'a', 2: 'b', 3: 'c', 4: 'd'},type(dictvar3) = <class 'dict'>
字典操作***********************************************
dictvardata = {'name': 'Jasmine', 'class': 'human', 'sex': 'girl', 'year': '22'},type(dictvardata) = <class 'dict'>
dictvardata['name'] = Jasmine
dictvardata = {'name': 'lily', 'class': 'human', 'sex': 'girl', 'year': '22'},type(dictvardata) = <class 'dict'>
dictvardata = {'name': 'lily', 'sex': 'girl', 'year': '22'},type(dictvardata) = <class 'dict'>
dictvardata = {'name': 'lily', 'sex': 'girl', 'year': '22', 'math': '99'},type(dictvardata) = <class 'dict'>
'math' in dictvardata = True
'math' not in dictvardata = False
len(dictvardata) = 4
dictvardata.keys() = dict_keys(['name', 'sex', 'year', 'math'])
dictvardata.values() = dict_values(['lily', 'girl', '22', '99'])
dictvardata.items() = dict_items([('name', 'lily'), ('sex', 'girl'), ('year', '22'), ('math', '99')])
name lily sex girl year 22 math 99
Process finished with exit code 0
9.2 字典相关函数
code:
# ********************************************************************
"""
字典相关函数:
in---检测键值是否存在,存在返回True,不存在返回False
not in---检测键值是否不存在,存在返回False,不存在返回True
len(dict)---计算长度(有多少键值对)
dict.keys()---获取所有的键值--返回键值组成的列表
dict.values()---获取所有的value---返回value组成的列表
dict.items()---获取所有的键值对 key and value
list(d)---返回字典d中使用的所有键的列表。
iter(d)---返回以字典的键为元素的迭代器。 这是iter(d.keys())的快捷方式。
dict.get(key[, default])---如果key存在于字典中则返回key的值,否则返回default。如果default未给出则默认为 None,因而此方法绝不会引发 KeyError。
dict.update([other])---所给键值存在则更新,不存在则添加元素。
update() 接受另一个字典对象,或者一个包含键/值对(以长度为二的元组或其他可迭代对象表示)的可迭代对象。
setdefault(key[, default])---如果字典存在键key,返回它的值。如果不存在,插入值为default的键 key ,并返回default。default默认为None。
pop(key[, default])---如果key存在于字典中则将其移除并返回其值,否则返回default。如果default未给出且key不存在于字典中,则会引发 KeyError。
reversed(d)---返回一个逆序获取字典键的迭代器。这是reversed(d.keys())的快捷方式。
popitem()---从字典中移除并返回一个(键, 值)对。键值对会按LIFO的顺序被返回。
popitem()适用于对字典进行消耗性的迭代,这在集合算法中经常被使用。
如果字典为空,调用 popitem() 将引发 KeyError。
clear()---移除字典中的所有元素。
copy()---返回原字典的浅拷贝。
"""
dictvardata = {'name':"Jasmine",'class':"human",'sex':"girl","year":"22"}
print("list()**********************************************************")
print(f"list(dictvardata) = {list(dictvardata)}") # list()
print("iter()**********************************************************")
print(f"iter(dictvardata) = {iter(dictvardata)}") # iter()
print(f"list(iter(dictvardata)) = {list(iter(dictvardata))}")
print("get()**********************************************************")
print(f"dictvardata.get('name') = {dictvardata.get('name')}") # get()
print(f"dictvardata.get('bbala') = {dictvardata.get('bbala')}")
print("update()**********************************************************")
dictvardata.update(name='lili',year='18',baba='luohui') # update()
print(f"dictvardata = {dictvardata}")
dictvardata.update([[1,2],[3,4],[5,6]])
print(f"dictvardata = {dictvardata}")
print("pop()**********************************************************")
dictvardata.pop(1) # pop()
print(f"dictvardata = {dictvardata}")
print("popitem()**********************************************************")
dictvardata.popitem() # popitem
print(f"dictvardata = {dictvardata}")
dictvardata.popitem() # popitem
print(f"dictvardata = {dictvardata}")
print("reversed()**********************************************************")
print(f"reversed(dictvardata) = {reversed(dictvardata)}") # iter()
print(f"list(reversed(dictvardata)) = {list(reversed(dictvardata))}")
print("copy()**********************************************************")
x = dictvardata.copy()
print(f"x = {x}")
print("clear()**********************************************************")
dictvardata.clear()
print(f"dictvardata = {dictvardata}")
运行结果:
E:\Programs_Way\Python\python.exe D:/Prj/Python/Study_Basic_Grammar/_44dict_functions.py
list()**********************************************************
list(dictvardata) = ['name', 'class', 'sex', 'year']
iter()**********************************************************
iter(dictvardata) = <dict_keyiterator object at 0x000001B66FC9BD10>
list(iter(dictvardata)) = ['name', 'class', 'sex', 'year']
get()**********************************************************
dictvardata.get('name') = Jasmine
dictvardata.get('bbala') = None
update()**********************************************************
dictvardata = {'name': 'lili', 'class': 'human', 'sex': 'girl', 'year': '18', 'baba': 'luohui'}
dictvardata = {'name': 'lili', 'class': 'human', 'sex': 'girl', 'year': '18', 'baba': 'luohui', 1: 2, 3: 4, 5: 6}
pop()**********************************************************
dictvardata = {'name': 'lili', 'class': 'human', 'sex': 'girl', 'year': '18', 'baba': 'luohui', 3: 4, 5: 6}
popitem()**********************************************************
dictvardata = {'name': 'lili', 'class': 'human', 'sex': 'girl', 'year': '18', 'baba': 'luohui', 3: 4}
dictvardata = {'name': 'lili', 'class': 'human', 'sex': 'girl', 'year': '18', 'baba': 'luohui'}
reversed()**********************************************************
reversed(dictvardata) = <dict_reversekeyiterator object at 0x000001B66FC9BF40>
list(reversed(dictvardata)) = ['baba', 'year', 'sex', 'class', 'name']
copy()**********************************************************
x = {'name': 'lili', 'class': 'human', 'sex': 'girl', 'year': '18', 'baba': 'luohui'}
clear()**********************************************************
dictvardata = {}
Process finished with exit code 0
9.3 字典推导式
code:
# ***********************************************************************
# 字典推导式
# 把字典中的键值对位置进行交换
vardict = {'a':1,'b':2,'c':3}
print(f"vardict = {vardict}")
newdict = {v:k for k,v in vardict.items()}
print(f"newdict = {newdict}")
运行结果:
E:\Programs_Way\Python\python.exe D:/Prj/Python/Study_Basic_Grammar/_45dict_comprehension.py
vardict = {'a': 1, 'b': 2, 'c': 3}
newdict = {1: 'a', 2: 'b', 3: 'c'}
Process finished with exit code 0