?字典(dict) 字典是一种新的数据结构,称为映射(mapping) 字典的作用和列表类似,都是用来储存对象的容器 列表储存数据的性能很好,但是查询数据的性能很差 在字典中每一个元素都有一个唯一的名字,通过这个唯一的名字可以快速查找到指定的元素 在查询元素时,字典的效率非常快 在字典中可以保存多个对象,每个对象都会有一个唯一的名字,这个唯一的名字,我们称为键(key),通过key可以快速的查询value,所以字典,我们也称为叫做键值对(key--value)结构 每个字典中可以有多个键值对,而每一个键值对我们称其为一项(item) 创建字典:使用{}来创建字典 创建一个空字典
d = {}
#输出这个空字典,并检查它的类型
print(d,type(d))
创建一个保护有数据的字典 语法: {key1:value1,key2:value2,key3:value3} 字典的值可以是任意对象 字典的key可以是任意的不可变对象 :int ,str ,bool, tuple 字典的key是不能重复的,如果出现重复的后边的会替换到前边的
n = {"name":"孙悟空","age":"20","sex":"男"}
print(n)
# 字典的取值:需根据key来获取,如果使用了字典中不存在的键,会报错
print(n["name"],n["age"],n["sex"])
字典的使用: 创建字典 语法:{k1:v1,k2:v2,k3:v3}
使用dict()函数来创建字典
d = dict(name = "孙悟空",age = "23",sex = "男")
#每一个参数都是一个键值对
参数名就是键,参数名就是值(这种方式创建的字典,key都是字符串)
也可以将包含双值子序列的序列转换为字典 双值序列:序列中只有两个值,[1,2],[3,4],("1",3) "ab" 子序列:如果序列中的元素也是序列,那么我们称这个元素为子序列 ? ? ? ? ? ? ? ? # 如: [(1,2),(3,6)]
m= dict([("name","五宋朝"),("age",19)])
#输出并检查其类型
print(m,type(m))
?len(): 获取字典中键值对的个数
m= dict([("name","五宋朝"),("age",19)])
#利用len()函数获取键值对的个数
print(len(m))
in 和 not in : ? ? ? ? # in:检查字典中是否包含指定的键 ? ? ? ? # not in 检查字典中是否不包含指定的键
m= dict([("name","五宋朝"),("age",19)])?
print("name" in m)
print("ann" not in m)
获取字典中的值 1.?获取字典中的值,根据键值来获取 语法: ?d[key] ?
m= dict([("name","五宋朝"),("age",19)])
print(m["name"])
通过这个方法来获取值时,如果键值不存在,会抛出异常: keyError
2.?d.get(key[, default])方法 该方法用来根据键值来获取字典中的值
m= dict([("name","五宋朝"),("age",19)])
print(m.get("name"))
print(m.get("wr5t"))
用这个方法来获取字典中的值时,如果键值不存在,会返回None,而不会报错 也可以指定一个默认值,来作为第二个参数,这样当获取不到值时将会返回默认值 # print(m.get("uuu","wwe"))
修改字典 : 1.?d[key] = value 如果key存在则覆盖对应的value,不存在则添加
m= dict([("name","五宋朝"),("age",19)])
m["name"] = "wetyu"
m["adress"] = "河南"
print(m)
2.?s.setdefault(key[,default]) 可以用来向字典中添加key-value
如果key已经存在于字典中,则返回key的值,不会对字典做任何操作 如果key值不存在,则向字典中添加这个key,并设置value
m= dict([("name","五宋朝"),("age",19)])
m.setdefault("name","猪八戒")
print(m)
3.?update([other]) 将其他的字典中的key-value添加当前字典中 如果有重复的key,则后边的会替换原先的
a = {"a":1,"b":2,"c":3}
a2 = {"a":4,"e":5,"f":6}
a.update(a2)
?
删除 1.?使用del来删除字典中的键值对,key不存在时,会报错
a = {"a":1,"b":2,"c":3}
del a["a"]
print(a)
?
2.?s.popitem()方法 随机删除字典中的键值对,一般都会删除最后一个键值对 删除之后,它会将删除的key-value作为返回值返回, 注意:返回的是一个元组:第一个元素是key,第二个元素是value 当使用popitem()来删除一个空字典时,会抛出异常 #q = a.popitem() ?
3.?pop(key[,default]) 根据key删除字典中的key-value,并返回所删除的value值 如果删除不存在的key,则会抛出异常 如果指定了默认值(default),再删除不存在的key时,此时不会报错,而是直接返回默认值
a = {"a":1,"b":2,"c":3}
q = a.pop("o",9)
print(q)
print(a)
4.?s.clear()方法 删除字典中的所有的项(清空字典)
a = {"a":1,"b":2,"c":3}
a.clear()
print(a)
5.?s.copy()方法 该方法用于对字典进行浅复制 #注意:浅复制只会简单的对象内部的值 如果内部的值也是一个可变对象,这个可变对象不会被复制 复制以后的对象,和原对象是独立的,修改一个不会影响另一个
a = {"a":1,"b":2,"c":3}
b = a.copy()
b["a"] = 343
print(a)
print(b)
#检查一下两个变量的id
print(id(a))
print(id(b))
下面演示浅复制
d = {"a":{"name":"唐僧","age":34},"b":2,"c":3}
print(d)
d2 = d.copy()
print(d2)
d["a"]["name"] = "无效"
print(d)
print(d2)
遍历字典 方法一: keys():该方法会返回所有的key 该方返回的是序列,序列中保存有字典的所有的key
d = {"a":1,"b":2,"c":3,"d":4,"e":5}
for k in d.keys() :
? ? print(k,d[k])
print(d[k])
print(d.keys())
方法二: values() 该方法返回一个序列,序列中保存的是字典中的所有的值
for m in d.values() :
? ? print(m)
方法三: 该方法会返回字典中所有的项 它会返回一个序列,这个序列中包含有双值子序列 双值分别是:字典中的key和value
print(d.items())
for q,v in d.items() :
? ? print(q,"=",v)
梧高风必至!
|