所有的编程语言都有字典这种数据类型,用法都一样.Python和Golang中叫字典,其他语言中有的叫哈希,映射,map等等,都是一个概念.
描述一个物体相关信息,一对(key,value的形式)
数据类型不一样,意思也不一样,不同类型,但是这些数据联合在一起都表示同一个物体的信息.
值可以是任何数据类型,键只能使用字符串.数字或元组,通常键只用字符串表示(为了和其他语言保持一致)
键必须是唯一的
没有真正的索引,所以是无序的,打印输出会出现顺序不一致的情况.
作用:描述一个物体的信息,类型可以不同
格式:{key1:value1,key2:value2...}
字典[key]
key唯一
dict1 = {"name": "zhangshan", "age": 18, "boy": True, "name": "456"} # 如果key重复了,value会取最后的那个key对应的value # 字典的元素总数等于 ,号的个数 + 1 print(dict1["name"]) # 获取指定key对应的value print(type(dict1)) print(dict1) dict1["name"] = "op" # 修改指定key对应的value print(dict1) dict1["height"] = 1.75 # 如果key存在就是修改,key不存在就是增加键值对 print(dict1)
1.增加元素:
dict1 = {"name": "zhang", "age": 15,'gender':'male'} dict1["height"] = 1.7 # key不存在就是增加,存在就是修改
2.删除元素:
dict1 = {"name": "zhang", "age": 15,'gender':'male'} del dict1["gender"] # 删除指定key对应的键值对,无返回值 name = dict1.pop("name") # 删除指定key对应的键值对,并且把删除的value返回,pop()本来是删除最后一个,但是因为字典是无序的,所以必须指定key,否则会报错
3.清空元素:
dict1 = {"name": "zhang", "age": 15, 'gender': 'male'} dict1.clear() # 清空
4.修改元素:
dict1 = {"name": "zhang", "age": 15,'gender':'male'} dict1["name"] = "74" # 修改key对应的value dict1.setdefault("name1", "lisi") # 如果key存在,什么也不做,key不存在就增加键值对 dict2 = {'height': 175, "boy": True, "name": "liskk"} # key存在就是修改(因为key如果存在的话新添加的key对应的value会覆盖掉原来的value),不存在就增加键值对 dict1.update(dict2)
5.查询元素:
# 查询的方法均有返回值 dict1 = {"name": "zhang", "age": 15,'gender':'male'} name = dict1["name"] # 获取指定key的value,如果获取的key不存在,报错 name = dict1.get("name1") # 获取指定key的value,如果获取的key不存在,不会报错,返回None
6.获取所有key:
dict1 = {"name": "zhang", "age": 15,'gender':'male'} keys = dict1.keys() # 获取字典中所有的键 for key in keys: print(key) print(keys) # 输出的是:dict_keys(['name', 'age'])
7.获取所有的value:
dict1 = {"name": "zhang", "age": 15,'gender':'male'} values = dict1.values() # 获取出字典中所有的值,返回的也是视图对象 for value in values: print(value) print(values)
8.获取key-value键值对:
dict1 = {"name": "zhang", "age": 15,'gender':'male'} items = dict1.items() # 获取出所有的键值对,视图对象,里面是一个元组类型,且元组的个数是固定的,所以可以使用解包 print(items) for item in items: print(item) for key,value in dict1.items(): # 解包 print(key) print(value) for ele in dict1: # 遍历字典默认取到的是key,这种最好用,最常用 print(dict1[ele]) # 通过key来取到value
import sys it = dict1.keys() # 获取所有key print(sys.getsizeof(it)) # 占用少,叫视图对象 it1 = list(it) print(sys.getsizeof(it1)) # 占用的内存字节多 values = dict1.values() # 所有值 print(values) # dict_values(['zang', 15]) items = dict1.items() # 所有key-value键值对 print(items) # dict_items([('name', 'zang'), ('age', 15)]) print(type(items)) # <class 'dict_items'> for key, value in dict1.items(): print(key) print(value) for ele in dict1: # 遍历默认是key print(dict1) print(dict1[ele])
9.视图对象:
视图对象/可视对象:dict_keys(['name', 'age']),减少内存的占用.
支持的操作:
1.查看内部结构
2.支持for循环遍历
3.支持if in语句
4.没有增.删.改(类似元组)
5.可以把它转换成高级变量类型
Python2中 字典.keys(),字典.values()和 字典.items() 获取到的都是列表类型,Python3修改成了视图对象(也是可迭代对象),目的是为了减少内存的占用.数据类型变了,更加省内存空间了.(版本升级肯定是越来越好,不能变差了)