python字典與集合

字典

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)的值

"""

  1. del 字典[key] - 刪除指定key對應(yīng)的鍵值對
  2. 字典.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]]
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)方法

  1. 字典.clear() - 清空字典
  2. dict.fromkeys(序列,值=None) - 創(chuàng)建一個新的字典,將序列中的元素作為字典的key,將值作為每一個key對應(yīng)的值
  3. 字典.item() - 將字典轉(zhuǎn)中的鍵值對轉(zhuǎn)換成元祖作為容器中的元祖
  4. 字典.values(),字典.keys() - 將值或者鍵全部取出來
  5. 字典.setdefault(key,value=None) - 在字典中添加鍵值對(key存在的時候不會有修改的作用)
  6. 字典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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沃琅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蜘欲,更是在濱河造成了極大的恐慌益眉,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姥份,死亡現(xiàn)場離奇詭異郭脂,居然都是意外死亡,警方通過查閱死者的電腦和手機澈歉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門展鸡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人埃难,你說我怎么就攤上這事莹弊。” “怎么了涡尘?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵忍弛,是天一觀的道長。 經(jīng)常有香客問我考抄,道長剧罩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任座泳,我火速辦了婚禮惠昔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挑势。我一直安慰自己镇防,他們只是感情好,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布潮饱。 她就那樣靜靜地躺著来氧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上啦扬,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天中狂,我揣著相機與錄音,去河邊找鬼扑毡。 笑死胃榕,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的瞄摊。 我是一名探鬼主播勋又,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼换帜!你這毒婦竟也來了楔壤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤惯驼,失蹤者是張志新(化名)和其女友劉穎蹲嚣,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祟牲,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡端铛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了疲眷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡您朽,死狀恐怖狂丝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哗总,我是刑警寧澤几颜,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站讯屈,受9級特大地震影響蛋哭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涮母,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一谆趾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叛本,春花似錦沪蓬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春云挟,著一層夾襖步出監(jiān)牢的瞬間梆砸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工园欣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留帖世,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓俊庇,卻偏偏與公主長得像狮暑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子辉饱,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348