文章目录
字典
字典的基本介绍
- 字典属于⼀种新的数据结构称为映射(mapping)
- 字典的作⽤和列表类似,都是⽤来存储对象的容器
列表存储数据的性能好,但是查询数据的性能差,字典正好与之相反 - 在字典中每⼀个元素都有唯⼀的名字,通过这个唯⼀的名字可以找到指定的元素
- 这个唯⼀的名字我们称之为key 通过key可以快速查询value 也可以称之为值
- 字典我们也称之为键值对(key-value)结构
- 每个字典中都可以有多个键值对,⽽每⼀个键值对我们称其为⼀项(item)
- 创建⼀个有数据的字典 语法 {key:value}
- 字典的值可以是任意对象 字典的键可以是任意的不可变对象(int str bool tuple…)
- 字典的键是不能重复的,如果出现重复的后⾯的会替换前⾯的
- 字典是序列类型,但是是无序序列,所以没有分片和索引
- 字典中的数据每个都有键值对组成,即kv对
- key: 必须是可哈希的值,比如int,string,float,tuple, 但是,list,set,dict 不行
- value: 任何值
字典的创建
方法一:
d = {}
print(d)
方法二:
d = dict()
print(d)
- 创建有值的字典, 每一组数据用冒号隔开, 每一对键值对用逗号隔开
d = {"one":1, "two":2, "three":3}
print(d)
用dict创建有内容字典
d = dict({"one":1, "two":2, "three":3})
print(d)
利用关键字参数
d = dict(one=1, two=2, three=3)
print(d)
字典常见操作
成员检测, in, not in
# 成员检测检测的是key内容
d = {"one":1, "two":2, "three":3}
if 2 in d:
print("value")
if "two" in d:
print("key")
if ("two",2) in d:
print("kv")
通用函数: len, max, min, dict
# 通用函数: len, max, min, dict
# str(字典): 返回字典的字符串格式
d = {"one":1, "two":2, "three":3}
print(str(d))
清空删除字典 clear,del
- clear: 清空字典
- del命令删除整个字典.
- 注意:当删除一个不存在的键时,
# 注意:当删除一个不存在的键时,
dictionary =dict((('绮梦', '水瓶座'),('冷伊一','射手座'), ('香凝','双鱼座'), ('黛兰','双子座')))
if "香凝1" in dictionary: # 如果存在
del dictionary["香凝1"] # 删除一个元素
print(dictionary)
遍历字典:keys(),values(),items
- keys():返回字典的键组成的一个结构
k = d.keys()
print(type(k))
print(k)
- values: 同理,一个可迭代的结构
v = d.values()
print(type(v))
print(v)
- items()方法
d = {'name':'葫芦娃','age':10,'sex':'男'}
for k,v in d.items():
print(k,v)
- items: 返回字典的键值对组成的元组格式
d = {"one":1, "two":2, "three":3}
i = d.items()
print(type(i))
print(i)
修改字典:pop(),update(),popitem()
- pop(key[,default]) 根据key删除⾃定中的value。第⼆个参数可以指定⼀个默认值,当获取不到值的时候会返回默认值
site= {'a': 1, 'b': 2, 'c':3}#pop()方法删除并返回指定“键”的元素
pop=site.pop('nae',"字典没有此键值")#设置默认值防止因键值不存在出错
print(pop) # 输出 :字典没有此键值
site= {'a': 1, 'b': 2, 'c':3}#pop()方法删除并返回指定“键”的元素
pop=site.pop('a')
print(pop) # 输出 :1
print(site)
-
update()
update() 将其他字典的key-value添加到当前的字典当中 -
popitem() 方法返回并删除字典中的最后一对键和值
#如果字典已经为空,却调用了此方法,就报出 KeyError 异常。
site= {'a': 1, 'b': 2, 'c':3}
pop=site.popitem()
print(pop)
print(site)
- dictionary = dict(zip(list1,list2))#通过映射函数创建字典
- zip()函数:用于将多个列表或元组对应位置的元素组合为元组,
并返回包含这些内容的zip对象。如果想获取元组, 可以将zip对象使用
tuple()函数转换为元组;如果想获取列表,则可以使用list()函数
将其转换为列表。
name = ['绮梦','冷伊一','香凝']
# 作为键的列表
sign = ['水瓶座','射手座','双鱼座','双子座']
# 作为值的列表
#注意形成的字典键值一一对相应,最少的项为标准
dic = dict(zip(name,sign))
print(dic)
- fromkeys():
使用指定的序列作为键,使用一个值作为字典的所有的键的值
d = {"one":1, "two":2, "three":3}
# fromkeys: 使用指定的序列作为键,使用一个值作为字典的所有的键的值
l = ["eins", "zwei", "drei"]
# 注意fromkeys两个参数的类型
# 注意fromkeys的调用主体
d = dict.fromkeys(l, "hahahahahah")
print(d)
查找元素:get()
- get(key[,default]) - 根据键来获取字典的值。第⼆个参数可以指定⼀个默认值,当获取不到值的时候会返回默认值字典简介
好处是,可以设置默认值
d = {"one":1, "two":2, "three":3}
print(d.get("on333"))
# get默认值是None,可以设置
print(d.get("one", 100))
print(d.get("one333", 100))
#体会以下代码跟上面代码的区别
print(d['on333'])#结果报错:KeyError: 'on333'
浅复制和深复制:copy(),deepcopy()
- copy() ⽅法⽤来对字典进⾏潜复制注意:潜复制只会复制字典本身,如果字典中还有个字典是不会进⾏复制的
d = [1,2,3,[4,5,6]]
d2 = d.copy()
d[0] = 10
print('d =',d,id(d))
print('d2 =',d2,id(d2))
d = [10, 2, 3] 94178520
d2 = [1, 2, 3] 94178600
d = [1,2,3,[4,5,6]]
d2 = d.copy()
d[3][0] = 88
print('d =',d,id(d))
print('d2 =',d2,id(d2))
结果:
d = [1, 2, 3, [88, 5, 6]] 91950456
d2 = [1, 2, 3, [88, 5, 6]] 91950536
深复制
import copy
d = {'a':{'name':'葫芦娃','age':10},'b':2,'c':3}
d2 = copy.deepcopy(d)
d2['a']['name'] = '黑猫警长'
结果:
d = {'a': {'name': '葫芦娃', 'age': 10}, 'b': 2, 'c': 3} 52783216
d2 = {'a': {'name': '黑猫警长', 'age': 10}, 'b': 2, 'c': 3} 52783696
字典推导式
字典生成式
1:
d = {"one":1, "two":2, "three":3}
# 常规字典生成式
dd = {k:v for k,v in d.items()}
print(dd)
# 加限制条件的字典生成式
dd = {k:v for k,v in d.items() if v % 2 == 0}
print(dd)
2:
import random # 导入random标准库
randomdict = {i:random.randint(10,100) for i in range(1,5)}
print("生成的字典为:",randomdict)
3:
name = ['绮梦','冷伊一','香凝','黛兰'] # 作为键的列表
sign = ['水瓶','射手','双鱼','双子'] # 作为值的列表
dictionary = {i:j+'座' for i,j in zip(name,sign)}
# 使用列表推导式生成字典
print(dictionary)