字典的基本操作
1,dict()字典是python中唯一映射类型,用{ }来表示,内部使用{key:value}来表示这样的键值对来表示,并且;来保存数据.例如:{"jay":"周杰伦","jj","林俊杰"},在dict中"key"是唯一的,通过哈希"key"来计算出保存一地址.(通俗的来讲就是"key"不可改变),value没有限制,不是按照我们保存的顺序保存的,无序的.
- 不可变得数据类型:int str bool tuple
- 可变的数据类型:list dict set
- * "key"是不可变的, "value"可以是任何数据类型,是按照哈希算法顺序,不是连续的,所以.dict不能进行切片操作.
2,dict 的基本功能:
- 1>dict的增加:
- dict[不存在的key] = "value"...............................就在原dict中增加{key:value}
dict = {"jay": "周杰伦", 'jj': "林俊杰", "joly": "蔡依林"}
dict["xx"] = "雪雪" # 当字典中不存在可以时,要增加这一组键值对
dict["joly"] = "小雪" # 当字典中存在此键的时候,就修改这个键锁对应的value值
# 也可以通过setdefault("key": "value")来说实现对dict的增加
dic = {"jay": "周杰伦", "jj": "林俊杰", "joly": "蔡依林"}
dic.setdefault("xuexue", "雪雪") # 当原列表中没有相同key时,此时是增加的功能
print(dic)
- 2>dict的删除:
- 格式:dict.pop("key"), del dict[key], ret.popitem("key").......随机删除
dict = {"jay": "周杰伦", "jj": "林俊杰", "joly": "蔡依林"}
ret = dict.pop("jay") # 指定删除字典中的键,就可以把这一组键值对删除
print(ret) # 把删除的value值返回给ret
ret1 = dict.popitem() # 此时是随机删除,但是我试了不是随机删除(删除最后一组键值对)
print(dict)
ret2 = dict.clear() # 清空字典中的所有键值对
print(dict)
- 3>dict的修改:
- 格式:dict[存在的key] = 全新的"value" ................... d1.update(d2) 把d2的k--v更新到d1中
dict = {"jay": "周杰伦", "jj": "林俊杰", "joly": "蔡依林"}
dict["jay"] = "周星星" # 如果字典中存在这个key就是修改,不存在就是增加一组键值对
print(dict) # 替换的只是value,当value是int的时候就可以做运算,如果是str就可以拼接和里拿徐行输出
dict1 = {"jay": "周杰伦", "jj": "林俊杰", "joly": "蔡依林"}
dict2 = {"sylar": "邱老师", "jay":" 胡汉三","wusir": "吴佩琪"}
dict1.update(dict2) # 把dict2中的内容更新到dict1中,如果存在d1,与d2相同的key是则会替换,否则增加
print(dict1) # {'jay': ' 胡汉三', 'jj': '林俊杰', 'joly': '蔡依林', 'sylar': '邱老师', 'wusir': '吴佩琪'}
print(dict2) # {'sylar': '邱老师', 'jay': ' 胡汉三', 'wusir': '吴佩琪'}
- 4>dict的查找:
- 格式:print(dict["key"]) print(dict.get("key")) .setdefault("key")
dict = {"jay": "周杰伦", "jj": "林俊杰", "joly": "蔡依林"}
print(dict["jay"]) # 直接根据字典的键去查询value,如果没有这个key,则会报错
print(dict.get("key")) # 如果get中输入的是字典中已经存在的键,则返回这个value值,假如没有则返回None
ret = dict.setdefault("jay")
print(ret) # 当字典中存在这个键的时候,就会对应的value值返回给ret
print(dict) # 当字典中不存在这个key,就会新增这个键值对
ret1 = dict.setdefault("xuexue", "雪雪")
print(ret1) # 此时输出的是雪雪
print(dict) # 此输出的是{'jay': '周杰伦', 'jj': '林俊杰', 'joly': '蔡依林', 'xuexue': '雪雪'}
# 小结:在执行setdefault("key")中,先判断"key"是否存在dict中,如果存在就执行查询功能
# 如果dict中不存在key则执行的是增加功能
3,dict的常用操作方法:
- 1> .keys().............返回所有字典的key的集合(高仿列表)(括号里边不用加任何东西)....
dict = {"jay": "周杰伦", "jj": "林俊杰", "joly": "蔡依林"}
print(dict.keys()) # 此时拿到的是字典里的所有的key值:dict_keys(['jay', 'jj', 'joly'])
for key in dict.keys(): # 拿到的字典所有的key是一个类似列表,但不是列表(可以大迭代)
print(key) # jay jj joly
- 2> .values( ) 同理1>:dict中的"value"所有都输出一个集合(高仿列表)
dict = {"jay": "周杰伦", "jj": "林俊杰", "joly": "蔡依林"}
print(dict.values(), type(dict.values())) # dict_values(['周杰伦', '林俊杰', '蔡依林']) <class 'dict_values'> for value in dict.values(): print(value) # 周杰伦 林俊杰 蔡依林
- 3> .items( ) 输出的是键值对("key","value").....且是一个元组
dict = {"jay": "周杰伦", "jj": "林俊杰", "joly": "蔡依林"}
print(dict.items()) # 此时输出的是:dict_items([('jay', '周杰伦'), ('jj', '林俊杰'), ('joly', '蔡依林')])
# dict_items和dict_keys和dict_values都一样,都是可迭代对象
for item in dict.items():
print(item) # ('jay', '周杰伦') ('jj', '林俊杰') ('joly', '蔡依林')
# 此时item输出的是键值对组成的元组
# 因此:
for k,v in dict.items():
print(k, v) # jay 周杰伦 jj 林俊杰 joly 蔡依林
# 因此可以引出结构的概念:
# 解构:就是把元素拆开并一一对应(反映了dict的映射关系性质)
a, b = 1,2
print(a) # 此时输出的结果是:1
print(b) # 此时输出的结果是:1
a, b, c =("雪雪","小雪","雪人")
print(a) # 雪雪
print(b) # 小雪
print(c) # 雪人
a, b = (1,2)
print(a, b) # 1 2
- 4>dict的嵌套:就是dict中包含list,tiple,int,str,bool,
dict = { "name": "汪峰", "age": 18, "wife": { "name": "章子怡", "age": 28, }, "children": [ "第一个孩子", "第二个孩子", ], "desc": "峰哥不会搞我吧,没关系,我想上头条" } # 同样适应于增删改查 print(dict.get("children")) # 此时输出的结果是:['第一个孩子', '第二个孩子']
浙公网安备 33010602011771号