第四章 数据类型—字典(dict)、集合(set)
字典
-
dict 用{ } 来表示 键值对数据 {key:value} 具有唯一性
-
键 key: 都必须是哈希的, 不可变的数据类型才可以做字典中的键
-
值 value: 没有任何的限制,任何数据类型都可以
-
字典本身是无序的(不可以切片),但是3.6版本添加了有序
#字典的键key可以是什么, 值value(任何类型都可以) dic={"name":"alex","age":9000} # 键可为字符串 print(dic) dic={1:"a",2:"b",3:"c"} # 键可为数字 print(dic) dic={True:"1",False:"0"} # 键可为bool print(dic) dic={(1,2,3):"ahd"} # 键可为tuple 元组 print(dic) dic={[1,2,3]:"abhd"} # 键不可为列表 **** 集合也不可用做键 print(dic)
字典的增删改查
补充:dic[key]=value 索引键key可用来 添加\删除\修改\查看
一、增加
-
dic[key]=value # 直接索引 键key 赋value值 更改
-
dic.setdefault(key,value) # 如果key在字典中存在,不进行操作,否则添加
# 也可以通过key查询,没有则返回None
dic = {"易大师": "剑圣", "剑豪": "托儿所", "草丛伦": "大宝剑"}
dic["诺手"] = "人头狗" # 新增 结尾处 如果key在字典中存在,就修改value值,不存在就在结尾处添加 print(dic)
dic.setdefault("火女", "安妮") # 新增 结尾处 中间用逗号隔开 dic.setdefault("火女", "火男") # 如果key在字典中存在不进行任何操作,不存在就进行添加 print(dic)
二、删除
-
dic.pop(key) # 通过指定key删除字典中的内容,可返回被删除的Value值
-
del dic[key] # 通过键来删除 不放key 则删除整个字典
-
dic.clear( ) # 清空字典
-
dic.popitem( ) # 随机删除, 在3.6版本中默认删除最后一个
# 也有返回值 返回的是元组 ( key,value )
-
字典的删除没有 remove( )
dic={"易大师":"剑圣","剑豪":"托儿所","草丛伦":"大宝剑"} ret=dic.pop("易大师") # 通过指定key删除字典中内容,返回的是value值 print(ret) # 接收到的删除的内容是value print(dic) del dic["易大师"] # 通过键删除 print(dic) dic.clear() # 清空返回的是{} 空字典 print(dic) ref=dic.popitem() # 随机删除 但在3.6版本中默认删除最后一个 # 也有返回值 返回的是元组 ("key","value") print(dic)
三、修改
-
dic[key]=value # 索引 键key 既可以用来修改也可以用来添加
-
dic.update(字典名) # 用新的字典去更新原字典
替换时,若key值在原字典中存在,只修改value值,
不存在,在结尾处添加
dic={"易大师":"剑圣","剑豪":"托儿所","草丛伦":"大宝剑"} dic["剑豪"]="哈莎阁" # 索引键key 来强制修改 print(dic) dic1={"火女":"安妮","火男":"布兰德","剑豪":"暗影猎手"} dic.update(dic1) #替换时,若key值在元字典中存在,则只修改value值,不存在的在结尾处添加 print(dic) #输出:{'易大师': '剑圣', '剑豪': '暗影猎手', '草丛伦': '大宝剑', '火女': '安妮', '火男': '布兰德'}
四、查
-
dic[key] # 索引键key查看 不存在时会报错
-
dic.get(key) # 查看时key不存在会返回None
-
dic.get(key,"自定义内容") # 查看时key不存在可返回自定义内容
-
dic.setdefault(key) # 即可查询,当有Value时,也可用于添加,key存在,无操作
-
for 循环 # 当 for i in dic 时,获取的是key
dic = {"易大师": "剑圣", "剑豪": "托儿所", "草丛伦": "大宝剑"} # 查看的是value值 print(dic["易大师"]) # 查看1 键不存在时 会报错 print(dic.get("易大师")) # 查看2 键不存在时 返回none 建议使用get print(dic.get("易大师父", "你傻啊,没有")) # 不存在 也可返回自定义的"你傻啊,没有" print(dic.setdefault("易大师")) # 查看3 也可用于查询 若赋值则可修改 # for循环查看的是key for i in dic: print(i) # 循环默认获取的是字典中的键
字典的其他操作
-
keys
-
values
- items
dic={"易大师":"剑圣","剑豪":"托儿所","草丛伦":"大宝剑"} print(dic.keys()) # 获取的是高仿列表 #输出:dict_keys(['易大师', '剑豪', '草丛伦']) print(dic.values()) # 获取的是高仿列表 #输出:dict_values(['剑圣', '托儿所', '大宝剑']) print(dic.items()) #高仿列表 获取的是每一个元组 #输出:dict_items([('易大师', '剑圣'), ('剑豪', '托儿所'), ('草丛伦', '大宝剑')]) for i in dic: print(i) #输出key for i in dic.keys(): print(i) #输出key for i in dic.values(): print(i) #输出value for i in dic.items(): print(i) #输出键值对,以元组( )的形式展现
x = {'nan_ren': 'jiu_mo', "man": 'wbw'} a = x.items() print(x) # {'nan_ren': 'jiu_mo', 'man': 'wbw'} print(type(x)) # <class 'dict'> print(a) # # dict_items([('nan_ren', 'jiu_mo'), ('man', 'wbw')]) print(type(a)) # <class 'dict_items'>
(2)iteritems()操作方法
iteritems()方法在需要迭代结果的时候使用最适合,而且它的工作效率非常的高。
总结:
(1)在Python2.x中,iteritems() 用于返回本身字典列表操作后的迭代器【Returns an iterator on all items(key/value pairs) 】,不占用额外的内存。
(2)在Python 3.x 里面,iteritems()方法已经废除了。在3.x里用 items()替换iteritems() ,可以用于 for 来循环遍历。
解构(解包):
-
将后面的解构打开,按照位置赋值给变量,
-
支持字符串\列表\元组
a,b=(1,2) #元组 print(a) # 1 print(b) # 2 a,b=[1,2] #列表 print(a) # 1 print(b) # 2 a,b="12" #字符串 print(a) # 1 print(b) # 2 dic={"1":"2"} for a,b in dic.items(): print(a) #1 print(b) #2
补充:
-
批量创建key dic.formkeys()
dic1={} dics=dic1.fromkeys([1,2,3]) #批量创建 key print(dics) #输出:{1: None, 2: None, 3: None} dics=dic1.fromkeys([1,2,3],"abc") print(dics) #输出:{1: 'abc', 2: 'abc', 3: 'abc'}
字典的嵌套
dic={"name":"jiumo", "age":18, "wife":{"name":"wbw", "age":18, "salary":100000 }, "baby":[ {"name":"熊大","age":18}, {"name":"熊二","age":15} ] } print(dic["baby"][0]["age"]) # 查找熊大的年龄 print(dic.get("baby")[0].get("age")) # 查找熊大的年龄 dic["baby"][0]["age"]=19 # 将熊大的年龄改为1
集合
特点
- 元素是可哈希的即不可变的
- 无序的
- 不可重复的, 可以用于去重(重复的内容不打印)
- (存储的是字典里的key,不存储value)
- 集合本身是可变的数据类型, 不可哈希, 有增删改查的操作
- frozenset( )可以冻结集合,使集合 不可变, 可哈希
s={'aa','hufh','koi'} # set集合 s1={'aa','hufh','koi',('1',2)} # 可含有tuple s2={'aa','hufh','koi',['1',2]} # 错误的 含有list不可哈希
去重
lst = [11,5,4,1,2,5,4,1,25,2,1,4,5,5] s = set(lst) # 把列表转换成集合. 进行去重复 lst = list(s) # 把集合转换回列表. print(lst)
冻结
s=frozenset(['hh','ji','de']) dic={s:'123'} # 集合s冻结后不可变,可以做字典的key print(dic) # {frozenset({'de', 'hh', 'ji'}): '123'}