字典
1.什么是字典
1)
字典是容器型數(shù)據(jù)類型(序列)改含,將{}作為容器的標志屋谭,里面的元素用逗號隔開
特點:可變(支持增刪改)畜挨,無序(不支持下標操作)
2)字典中的元素
字典中的元素就是鍵值對综液,以‘鍵:值’的形式成對出現(xiàn) - {鍵1:值1叉橱,鍵2:值2,...}
key - value字典存儲數(shù)據(jù)主要是為了存值褐墅,鍵知識為了區(qū)分不同的值而存在的
鍵值對中的鍵 - 不可變(所以列表不行)拆檬、唯一的(同一個字典中必須只有一個)
鍵值對中的值 - 沒有要求洪己,和列表元素一樣,任何數(shù)據(jù)類型都可以作為值
print({'x': 1, 'y': 3, 'x': 4}) # 對于重復(fù)的鍵竟贯,打印會自動刪去重復(fù)項
2.查 - 獲取字典的值
- 切片只針對有序的序列才有效
1)獲取單個元素的值
字典[key] - 獲取字典中指定key對應(yīng)的值;如果key不存在,會報錯
字典.get(key)/字典.get(key,默認值) - 獲取字典中指定的key對應(yīng)的值;如果key不存在,返回None或者默認值
2)遍歷
for key in 字典: 拿到的是字典中所有的key
for value in 字典.values: #拿到的是字典中所有的value
for key,value in 字典.itmes(): #拿到的是字典中所有的鍵和值
練習
# 1)獲取單個元素
dog = {'name': '哈尼', 'age': 3, 'type': '金毛', 'color': '金色'}
print(dog['name'],dog['color'])
print(dog.get('weight', '沒有該值')) # 沒有返回默認值
# 2)遍歷
# 常用的遍歷方式,最好用這種
for x in dog:
print(x) # 拿到字典中所有的key
# 不建議使用
for value in dog.values():
print(value) # 拿到字典中所有的值value
# 不建議使用
for key,value in dog.items():
print(key,value)
3.增/改
- 增 - 添加鍵值對;
- 改 - 修改字典中某個key對應(yīng)的值
- 語法: 字典[key] = 值 - 當key存在,為修改key對應(yīng)的值;當key不存在,為添加鍵值對
dog = {'name': '哈尼', 'age': 3, 'type': '金毛', 'color': '金色'}
dog['weight'] = 34
print(dog)
dog['weight'] = 43
print(dog)
4.刪 - 刪除key對應(yīng)的值
"""
- del 字典[key] - 刪除指定key對應(yīng)的鍵值對
- 字典.pop(key) - 取出指定key對應(yīng)的值,但取出后,原字典中key對應(yīng)的鍵值對也沒有了
dog = {'name': '哈尼', 'age': 3, 'type': '金毛', 'color': '金色'}
del dog['color']
print(dog) # {'name': '哈尼', 'age': 3, 'type': '金毛'}
type1 = dog.pop('type')
print(dog,type1) # {'name': '哈尼', 'age': 3} 金毛
5.相關(guān)運算
- 字典不支持: +, *, <, >, >=, <=,
- 字典只支持: ==, != (字典中只要鍵值對都相等即為==,不考慮順序)
print({'name': '哈尼', 'age': 3} == {'name': '哈尼', 'age': 3}) # True
print({'age': 3, 'name': '哈尼'} == {'name': '哈尼', 'age': 3}) # True
6.相關(guān)操作: in / not in; max,min,sum,len
- key in 字典 - 判斷字典中是否存在某個鍵
- max,min,sum - 針對的是key的操作
- dict(數(shù)據(jù)) -將指定數(shù)據(jù)轉(zhuǎn)換成字典
- 數(shù)據(jù)的要求:
- 1)數(shù)據(jù)本身是一個序列
- 2)序列中元素必須是且只有兩個元素的小序列
- 如:[[元素1,元素2],[元素3,元素4]]
- 數(shù)據(jù)的要求:
print(2 in {'a': 1, 'b': 2}) # False
print('a' in {'a': 1, 'b': 2}) # True
dict1 = {'a': 1, 'z': 2, 'c': 3}
print(max(dict1)) # z 求key的最大值
dict2 = {1: 'a', 2: 'z', 3: 'c'}
print(sum(dict2)) # 6
print(max(dict2)) # 3
print(min(dict2)) # 1
print(len(dict2)) # 3
print(list(dict2)) # [1, 2, 3]
print(dict([[1, 2], [2, 3], [3, 4]])) # {1: 2, 2: 3, 3: 4}
7.相關(guān)方法
- 字典.clear() - 清空字典
- dict.fromkeys(序列,值=None) - 創(chuàng)建一個新的字典,將序列中的元素作為字典的key,將值作為每一個key對應(yīng)的值
- 字典.item() - 將字典轉(zhuǎn)中的鍵值對轉(zhuǎn)換成元祖作為容器中的元祖
- 字典.values(),字典.keys() - 將值或者鍵全部取出來
- 字典.setdefault(key,value=None) - 在字典中添加鍵值對(key存在的時候不會有修改的作用)
- 字典1.update(字典2) - 將字典2中的鍵值對全部添加到字典1中
練習
# 2) dict.fromkeys(序列,值=None) - 創(chuàng)建一個新的字典,將序列中的元素作為字典的key,將值作為每一個key對應(yīng)的值
print(dict.fromkeys((1, 2, 3, 4), 0)) # {1: 0, 2: 0, 3: 0, 4: 0}
print(dict.fromkeys((1, 2, 3, 4))) # {1: None, 2: None, 3: None, 4: None}
# 4) 字典.values(),字典.keys() - 將值或者鍵全部取出來
dict2 = {1: 'a', 2: 'z', 3: 'c'}
print(dict2.values()) # dict_values(['a', 'z', 'c'])
print(dict2.keys()) # dict_keys([1, 2, 3])
# 5) 字典.setdefault(key,value=None) - 在字典中添加鍵值對(key存在的時候不會有修改的作用)
dict2 = {1: 'a', 2: 'z', 3: 'c'}
dict2.setdefault(1, 'e')
dict2.setdefault(4, 'f')
print(dict2) # {1: 'a', 2: 'z', 3: 'c', 4: 'f'}
# 6) 字典1.update(字典2) - 將字典2中的鍵值對全部添加到字典1中
dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'x': 100, 'y': 200, 'a': 123}
dict1.update(dict2)
print(dict1) # {'a': 123, 'b': 2, 'c': 3, 'x': 100, 'y': 200}
dict2.update([[2, 3], [3, 4]]) # 不一定是字典答捕,可以轉(zhuǎn)化為字典的序列也可以
print(dict2) # { 'x': 100, 'y': 200, 'a': 123, 2: 3, 3: 4}
練習:用一個列表保存5只狗的信息,每只狗有:名字屑那、年齡拱镐、顏色和體重 1)求5只狗的平均年齡 2)找到5只狗體重最大的狗的名字
dogs = [{'name': '哈尼', 'age': 3, 'color': '金色', 'weight': 13},
{'name': 'lulu', 'age': 1, 'color': '棕色', 'weight': 8},
{'name': 'TT', 'age': 1.5, 'color': '白色', 'weight': 7},
{'name': '會長', 'age': 2, 'color': '棕色', 'weight': 13},
{'name': 'lala', 'age': 2, 'color': '白色', 'weight': 6}]
ages = 0
weights = []
for dog in dogs:
ages += dog['age']
weights.append(dog['weight'])
print(weights.count(max(weights)))
print(weights.index(max(weights),weights.index(max(weights))+1,len(weights)))
print(ages/5, dogs[weights.index(max(weights))]['name'])
集合
1.什么是集合(set)
1)集合
集合是容器型數(shù)據(jù)類型(序列);將{}作為容器的標志,多個元素用逗號隔開(和字典不一樣,集合是獨立的數(shù)據(jù),不是鍵值對)
特點:可變(增刪) 、 無序(不支持下標操作)
注意:{}表示的是空字典 set1 = set()才表示空集合
如:{1,3,12,34}2)元素 - 不可變的數(shù)據(jù);同一個元素只能有一個(唯一性)
- 集合自帶去重功能
練習
# 1.空集合
set1 =set()
print(type(set1))
set2 = {12,'abs',(1,2)}
print(set2)
# set3 = {'abs',[1,2]} # TypeError: unhashable type: 'list'
# set4 = {{'a':'b'},True} # TypeError: unhashable type: 'dict'
# 集合自帶去重功能(集合元素的唯一性)
scores = [65,23,34,45,54,23,45,65]
scores = list(set(scores))
print(scores)
2.集合元素的增刪改查
1)查 - 只支持遍歷持际,不能單獨獲取具體某一個元素
names = {'小明', '小米', '張三', '殷夫人'}
for item in names: # for in的遍歷都是通過轉(zhuǎn)化為列表,根據(jù)下標進行遍歷
print(item)
2) 增:
- 集合.add(元素) - 在集合中添加一個元素
- 集合.update(不可變序列) - 將序列中所有的元素添加到集合中
names.add('哪吒')
print(names)
names.update(['敖丙','龍王'])
names.update('yes') # 會將字符串拆分后添加
print(names)
3) 刪除 - 刪除元素
- 集合.remove(元素) - 刪除集合中指定的元素
names.remove('張三')
print(names)
4) 改(集合不支持修改元素的操作)
2.數(shù)學的集合運算:
set1 = {1, 2, 3, 4, 5, 6}
set2 = {1, 2, 3, 4, 7, 9, 10}
1)求交集:集合1 & 集合2
print(set1 & set2) # {1, 2, 3, 4}
2)求并集:集合1 | 集合2
print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7, 9, 10}
3)求差集:集合1 - 集合2 獲取集合1中除了集合2中的元素剩下的部分
print(set1-set2) # {5, 6}
print(set2-set1) # {9, 10, 7}
4) 求對稱差集: 集合1 ^ 集合2 獲取兩個集合除了公共部分剩下的部分
print(set1 ^ set2) # {5, 6, 7, 9, 10}
5) 集合1 > 集合2 判斷集合1中是否包含集合2
print({9, 10, 11, 12} > {1, 2, 3}) # False
print({9, 10, 11, 12} > {9,10}) # True
6) 集合1 < 集合2 判斷集合2中是否包含集合1
print({9, 10, 11, 12} < {9,10}) # False
print({9, 10, 11, 12} < {9,10,11,12,13,14}) # True