一、字典字典概述
1. 字典的详解格式
Python字典是一种可变容器模型,且可存储任意类型对象,超级如字符串、完整数字、字典元组等其他容器模型。详解

字典的超级每个键值key=>value对用冒号 : 分割,每个对之间用逗号,完整分割,整个字典包括在花括号{ }中 ,字典格式如下所示:
d = { key1 : value1, key2 : value2 } 
2. 字典的创建
有多种方法可以创建字典,以下几种方法创建的详解字典均等于 { "one": 1, "two": 2, "three": 3}
a = dict(one=1, two=2, three=3) b = { one: 1, two: 2, three: 3} c = dict(zip([one, two, three], [1, 2, 3])) d = dict([(two, 2), (one, 1), (three, 3)]) e = dict({ three: 3, one: 1, two: 2}) f = dict({ one: 1, three: 3}, two=2) a == b == c == d == e == f 3. 字典键的特性
字典值可以没有限制地取任何python对象,既可以是超级标准的对象,也可以是完整用户定义的,但键不行,字典有特殊的详解要求,两个重要的超级点需要记住:
唯一性:不允许同一个键出现两次,创建时如果同一个键被赋值两次,后一个值会被记住。云服务器 不可变:键必须不可变,所以可以用数字,字符串或元组充当,所以用列表、字典等就不行。 二、字典的11个方法
print(dir(dict)) [clear, copy, fromkeys, get, items, keys, pop, popitem, setdefault, update, values] 1. fromkeys()
描述:创建一个新字典,以序列seq 中元素做字典的键,value为字典所有键对应的初始值。
语法:dict.fromkeys(seq[, value])
参数:
seq 一个序列,作为字典键值列表。
value 可选参数, 设置键序列(seq)的值。
fromkeys是创造一个新的字典。就是事先造好一个空字典和一个列表,fromkeys会接收两个参数,第一个参数为从外部传入的可迭代对象,会将循环取出元素作为字典的key值,另外一个参数是字典的亿华云计算value值,不写所有的key值所对应的value值均为None,写了则为默认的值
#快速生成字典 seq = (Google, Baidu, Taobao) dict.fromkeys(seq) { Google: None, Baidu: None, Taobao: None} dict.fromkeys(seq, 1) { Google: 1, Baidu: 1, Taobao: 1} dict.fromkeys(range(5), 88) { 0: 88, 1: 88, 2: 88, 3: 88, 4: 88 s = [1,2,3] dict.fromkeys(seq,s) { Google: [1, 2, 3], Baidu: [1, 2, 3], Taobao: [1, 2, 3 2. clear()
描述:清除字典中所有的元素,得到的是空的字典。返回值None
语法:dict.clear()
参数:NA
dic = { "python3":123} print(dic.clear()) None def main(): my_dict = { 子: 鼠, 丑: 牛, 寅: 虎, 卯: 兔, 辰: 龙, 巳: 蛇, 午: 马, 未: 羊, 申: 猴, 酉: 鸡, 戌: 狗, 亥: 猪} print(子 in my_dict.keys()) print(鼠 in my_dict.values()) print(小伍哥 in my_dict.keys()) print(小伍哥 in my_dict.values()) print ("字典长度 : %d" % len(my_dict)) # 清空字典的指定用法 my_dict.clear() print(my_dict) print ("字典删除后长度 : %d" % len(my_dict)) if __name__ == __main__: main() #运行结果 True True False False 字典长度 : 12 { } 字典删除后长度 : 0 3. copy()
描述:返回一个字典浅拷贝的副本
语法:dict.copy()
参数:无
dict1 = { Name: Xiaowuge, Age: 17}; dict2 = dict1.copy() str(dict2) "{ Name: Xiaowuge, Age: 17}" dict_0 = { name:xiaowuge,age:18,proerty:shuai} dict_0 { name: xiaowuge, age: 18, proerty: shuai} dict_1 = dict_0.copy() dict_1 { name: xiaowuge, age: 18, proerty: shuai} dict_0.update({ age:28}) dict_0 { name: xiaowuge, age: 28, proerty: shuai} dict_1 { name: xiaowuge, age: 18, proerty: shuai 注意:python字典的复制、浅拷贝和深拷贝的区别
复 制:跟原字典完全一样
浅拷贝:将原字典拷贝一份,但是没有拷贝原字典中的子对象,所以当原字典中的子对象发生变化时,浅拷贝后的字典也会发生变化
深拷贝:将原字典连同其子对象一块进行了拷贝,所以深拷贝后的字典不会随着原字典的变化而改变
代码示例:
import sys import copy def main(): d0 = { 1:"a", 2:"b", 3:"c", 4:[1,2,3]} d1 = d0 d2 = d0.copy() d3 = copy.deepcopy(d0) print ("d0:", d0) print ("d1:", d1) print ("d2:", d2) print ("d3:", d3) print ("*"*10, "原字典d0改变后") d0[1] = "aa" d0[4].append(4) print ("d0:",id(d0),d0) print ("d1:",id(d1),d1) print ("d2:",id(d2),d2) print ("d3:",id(d3),d3) if __name__ == "__main__": main() d0: { 1: a, 2: b, 3: c, 4: [1, 2, 3]} d1: { 1: a, 2: b, 3: c, 4: [1, 2, 3]} d2: { 1: a, 2: b, 3: c, 4: [1, 2, 3]} d3: { 1: a, 2: b, 3: c, 4: [1, 2, 3]}