字典和集合
一、字典--dict
字典:容器類型午磁,以鍵值對作為元素。(字典里面存的數(shù)據(jù)全是以鍵值對出現(xiàn)的)
字典是可變的(增刪改)--- 指字典中的鍵值對的值和個數(shù)是可變的
- 鍵值對 --> 鍵:值(key:value)
{key1:value1,key2:value2痒钝,...}
注意:
key--必須唯一,不可變的(數(shù)字痢毒、布爾送矩、字符串、元組哪替,推薦使用字符串)
值 -- 沒有要求
1栋荸、聲明字典
dict1 = {1:100, 'a':97, True:'布爾', (10,11):'start'}
2、獲取字典的元素對應(yīng)的值(字典存數(shù)據(jù)實(shí)質(zhì)是存值凭舶,key是獲取value的手段)
person = {'name':'星辰','age':20}
print(person['name'])
通過 key 獲取 value 時(shí)晌块,如果key不存在會發(fā)生keyError異常
- dict['key'] 和 dict.get('key') 方法使用區(qū)別
person = {'name':'星辰','age':20}
print(person['name'])
#下面兩種方式結(jié)果相同
print(person.get('age'))
print(person['age'])
#下面兩種方式結(jié)果不同
print(person.get('sex')) #如果key不存在返回None
print(person['sex']) #報(bào)錯
使用情況總結(jié):
1、確定key肯定存在帅霜,用 dict[] 語法獲取 value 匆背;
2、key值可能不存在义屏,不存在的時(shí)候不希望報(bào)錯靠汁,而是對它進(jìn)行特殊處理,使用dict.get('key')方法
3闽铐、遍歷字典
遍歷字典直接取到的是字典所有 key 值
person = {'name':'星辰','age':20}
for key in person:
print(key)
print(person[key])
print()
name
星辰
age
20
4蝶怔、改(修改key對應(yīng)的value)
語法:dict[key] = 新值
5、增(添加鍵值對)
增加語法和修改語法一樣兄墅,如果存在即為修改踢星,不存在即為增加。
語法:dict[key] = 值
5隙咸、刪(刪除鍵值對)
語法:
(1)沐悦、del dict [key]
(2)、dict.pop(key)--- 與列表類似五督,將值取出來保存,不是鍵值對藏否。
6、運(yùn)算符 -- in 充包、not in
不支持 ' + ' 和 ' * ' 操作
查找 值 在不在字典中
7副签、一些關(guān)于字典的方法
說明:
- dict.copy():拷貝字典中所有元素遥椿,放在一個新的字典中(淺拷貝--見Day6)。
- dict.fromkeys(序列淆储,默認(rèn)值=None): 將序列中的每個值作為key冠场,默認(rèn)值為value創(chuàng)建一個新的字典
dict = {}
dict = dict.fromkeys('abcd',111)
print(dict)
{'a': 111, 'b': 111, 'c': 111, 'd': 111}
- dict.setdefault(key,default=None):添加鍵值對,默認(rèn)為None本砰,不能修改碴裙。
- dict1.update(dict2):將dict2的鍵值對更新(添加)到dict1中:(1)如果dict2中的key在dict1中存在,就用key2對應(yīng)的值更新key1的值(2)不存在就添加点额。
8舔株、字典和列表的組合使用--重點(diǎn)
列表和字典選擇:
列表--保存數(shù)據(jù)是一個類型。
字典--保存數(shù)據(jù)類型不同咖楣。
應(yīng)用:學(xué)生管理系統(tǒng)
a督笆、一個系統(tǒng)可以存儲多個學(xué)生
b芦昔、一個學(xué)生可以存儲:姓名诱贿,電話,籍貫咕缎,專業(yè)等
c珠十、添加、刪除凭豪、修改學(xué)生信息
#1焙蹭、列表中有字典
student_system = [ {'name':'stu1', 'age':18, 'tel':110},
{'name':'stu2', 'age':19, 'tel':120},
{'name':'stu3', 'age':20, 'tel':130}]
#取出第一個學(xué)生的籍貫
print(student_system[0]['name'])
#2、字典中有列表
py_class = {
'class_name':'python1806',
'student':[{'name':'stu1', 'age':18, 'tel':110},
{'name':'stu2', 'age':19, 'tel':120},
{'name':'stu3', 'age':20, 'tel':130}
],
}
#取班級名
print(py_class['class_name'])
#取第三個學(xué)生的名字
print(py_class['student'][2]['name'])
python1806
stu3
擴(kuò)展:
# 練習(xí)1:在班級python1806添加一個學(xué)生嫂伞,要學(xué)生自己輸入信息:名字孔厉,年齡,id
name = input('請輸入您的名字:')
age = int(input('輸入您的年齡:'))
id = input('請輸入您的id:')
student = {'name':name, 'age':age, 'id':id}
class_python1806 = [{'name':'stu1', 'age':18, 'tel':110},
{'name':'stu2', 'age':19, 'tel':120},
{'name':'stu3', 'age':20, 'tel':130}
]
class_python1806.append(student)
print(class_python1806)
#練習(xí)2:輸入一個學(xué)生的姓名帖努,根據(jù)姓名取刪除對應(yīng)的學(xué)生
name_del = input('輸入您要刪除的學(xué)生姓名:')
for i in range(len(class_python1806)):
if class_python1806[i]['name'] == name_del:
del class_python1806[i]
print(class_python1806)
結(jié)果:
請輸入您的名字:111
輸入您的年齡:11
請輸入您的id:11
[{'name': 'stu1', 'age': 18, 'tel': 110}, {'name': 'stu2', 'age': 19, 'tel': 120}, {'name': 'stu3', 'age': 20, 'tel': 130}, {'name': '111', 'age': 11, 'id': '11'}]
輸入您要刪除的學(xué)生姓名:111
[{'name': 'stu1', 'age': 18, 'tel': 110}, {'name': 'stu2', 'age': 19, 'tel': 120}, {'name': 'stu3', 'age': 20, 'tel': 130}]
二撰豺、集合 -- set
集合是python中的一種容器類型:無序的,可變的拼余,值唯一
1污桦、聲明一個集合
set1 = {1, 'abc'}
將其他序列轉(zhuǎn)換為集合,自動去重
set2 = set('name name') --> {'n', 'a', ' ', 'e', 'm'}
一般容器類型都不能放入集合匙监,比如列表凡橱,字典等
2、查(獲取集合中的元素)
集合是不能直接單獨(dú)獲取其中某一個元素的亭姥。
只能遍歷獲取每一個元素
3稼钩、增
a、set.add(元素)
b达罗、set1.update(set2) -- 將set2元素添加到set1中
4坝撑、刪
set.remove(元素)
set.clear() --- 全刪
5、數(shù)學(xué)相關(guān)的集合運(yùn)算 --- 重點(diǎn)
- 判斷包含情況:
集合1 >= 集合2:判斷集合1中是否包含集合2 - 求并集:|
set1 = {1, 2, 3, 4, 5, 6}
set2 = {1, 2, 3, 8, 9}
print(set1 | set2)
{1, 2, 3, 4, 5, 6, 8, 9}
- 求交集:&
set1 = {1, 2, 3, 4, 5, 6}
set2 = {1, 2, 3, 8, 9}
print(set1 & set2)
{1, 2, 3}
- 求差集:-
set1 = {1, 2, 3, 4, 5, 6}
set2 = {1, 2, 3, 8, 9}
print(set1 & set2)
{4, 5, 6}
- 求補(bǔ)集:^
set1 = {1, 2, 3, 4, 5, 6}
set2 = {1, 2, 3, 8, 9}
print(set1 ^ set2)
{4, 5, 6, 8, 9}
補(bǔ)充:
sum():python中對序列求和的方法
dir():可以查找一些內(nèi)置函數(shù)
isinstance(a, b):比較a、b類型是否相同绍载,返回True和False
isinstance(a, 類型):判斷a是否為一個類型
str.split():把字符串以空格分開诡宗,返回一個列表
re.sub('[要替換的字符]', '新字符',字符串)