有關字典:
字典與列表類似,不過字典中的順序無關緊要,字典中每個元素擁有與之對應的互不相同的鍵,需要通過鍵來訪問元素。鍵可以是字符串,也可以是python中其他任意的不可變類型:布爾型,整型,浮點型,元組,字符串。字典是可變的。
使用{ }來創建字典
用大括號{ }將一些列以逗號隔開的鍵值對(key:value)包裹起來即可進行字典的創建。最簡單的字典是空字典: empty_dict={ }
使用dict()轉換為字典
可以用dict()將包含雙值子序列的序列轉換成字典。
注意:字典中元素的順序是無關緊要的。
可以對任何包含雙值子序列的序列使用dict(),下面是栗子:
包含雙值列表的列表:lol=[['a','b'],['c','d']]? dict(lol)? --> {'a': 'b', 'c': 'd'}
包含雙值元祖的列表:lot=[('a','b'),('c','d')]? dict(lot) -->{'a': 'b', 'c': 'd'}
包含雙值列表的元組:tol=(['a','b'],['c','d'])? dict(tol) --> {'a': 'b', 'c': 'd'}
雙字符的字符串組成的列表:los=['ab','cd','ef']? dict(los)? -->{'a': 'b', 'c': 'd', 'e': 'f'}
雙字符的字符串組成的元組:tos=('ab','cd','ef')? dict(tos) {'a': 'b', 'c': 'd', 'e': 'f'}
使用[ key]添加和修改元素
向字典中添加元素非常簡單,只需要指定該元素的鍵并賦予相應的值即可。如果該元素的鍵已經存在,那么該鍵對應的值將被修改為新的。如果該元素的鍵不存在,則會被加入到字典。
栗子:dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}? dict['name']='Zll' -->{'Age': 7, 'Class': 'First', 'Name': 'Zara', 'name': 'Zll'}
使用update()合并字典
使用update()可以將一個字典的鍵值對復制到另一個字典中去。
栗子:
dict1 = { 'abc': 456 }? dict2 = { 'abc': 123, 98.6: 37 } ? ?
dict1.update(dict2)? -->{'abc': 123, 98.6: 37}
如果待添加的字典與待擴充的字典包含同樣的鍵,新歸入字典的值會取代原有的所有值。(見刪上面的栗子)
使用del刪除具有指定鍵的元素
可以通過del 刪除所給的鍵對應的元素: del ?dict['key']
使用clear{ }刪除所有的元素
使用clear(),或者給字典變量重新賦值一個空的字典{ }可以將字典中所有元素刪除:
dict.clear() 或者 dict={}
使用in判斷是否存在
可以使用in判斷一個鍵是否存在于字典中: 'abc' in dict1 --> True
使用[key]獲取元素
只需指定字典名和鍵即可獲得對應的值:dict1['abc']-->123
如果鍵不在字典中就會產生異常,可以有兩種方法解決:
第一種:首先使用 in 測試鍵是否在字典中
第二種:使用字典函數get()。你需要指定鍵名和字典名,如果鍵存在則返回對應的值;可以指定一個可選值,鍵不存在的時候就會返回這個可選值,如果沒有指定可選值,則返回None。
栗子:
dict1.get('abc')-->123
dict1.get('asx','Not a dict1')-->'Not a dict1'
dict1.get('asx') ?這時交互式環境什么都不顯示
使用keys()獲取所有鍵
使用keys()可以獲取字典中的所有鍵:
在Python3中keys()返回dict_keys(),它是鍵的迭代形式,有時我們需要的是一個鍵的列表,這時候我們要自己調用list()函數將其轉化為一個列表。同樣的,對于values()和items()的返回值都需要使用list()將其轉化為普通的列表。
栗子:
dict1.keys()? ? -->dict_keys(['abc', 98.6]) ??
list(dict1.keys()) -->['abc', 98.6]
使用values()可以獲得字典中的所有值:
栗子:list(dict1.values()) -->[123, 37]
使用items()獲得所有鍵值對
使用items()可以獲得字典中所有鍵值對
栗子:list(dict1.items()) --> [('abc', 123), (98.6, 37)] ?
每一個鍵值對以元組的形式返回,例如('abc', 123)
使用 = 賦值,使用copy()復制
與列表一樣,對字典的修改會反映到與之關聯的變量上:這是 = 賦值
使用copy()復制則是產生一個新的字典,與原字典無任何關系。
有關集合:
集合中的元素不可重復的,無序的
使用set()創建集合
可以使用set()創建一個集合,或者用大括號將一些列用逗號隔開的值包裹起來。
栗子:
建一個空的集合:empty_set=set()? ? 用大括號包括起來:even_number={1,2,3,4,5}
使用set()將其他類型轉換成集合
可以利用已有列表,字符串,元組,字典的內容來創建集合,其中重復的值會被舍棄。
使用字符串創建集合: set('letter')--> {'e', 'l', 'r', 't'} ?
使用列表創建集合:set(['cnj','uueb','ewuh']) -->{'cnj', 'ewuh', 'uueb'}
使用元組創建集合:set(('hhfb','hfdj','hfdqw')) --> {'hfdj', 'hfdqw', 'hhfb'}?
使用字典創建集合:當字典作為參數傳入到set()函數,只有鍵會被使用:
set({'abc': 123, 98.6: 37}) --> {'abc', 98.6} ?
合并及運算符
先創建兩個集合:a={1,2}? b={2,3}?
使用特殊標點符號&或者集合函數intersection()獲取集合的交集(兩個集合共同擁有的元素):
a&b-->{2}? a.intersection(b)-->{2}
使用 | 或者union()函數獲取集合的并集(至少出現一個集合中的元素):
a |b -->{1, 2, 3}? ? a.union(b)--> {1, 2, 3}?
使用字符 - 或者difference()可以獲得兩個集合的差集(出現在第一個集合不出現在第二個集合:
a-b-->{1}? ? a.difference(b)-->{1} ?
使用 ^或者symmetric_difference()可以獲得兩個集合的異或集(僅在兩個集合中出現一次):
a.symmetric_difference(b) -->{1, 3}? a^b-->{1, 3} ? 異或就是 &的取反值
使用<=或者issubset()可以判斷一個集合是否是另一個集合的子集(第一個集合的所有元素都出現在第二個集合中):a<=b -->False? ? a.issubset(b)-->False?
一個集合是本身的子集:a<=a --> True
當第二個集合包括第一個集合所有的元素但仍包含其他元素時,我們稱第一個集合為第二個集合的真子集。使用 < 進行判斷。 a={1,2}? b={1,2,3}? a<b-->True
超集與子集相反(第二個集合的所有元素都出現在第一個集合中),使用>=或者issuperset()可以進行判斷:b>=a -->True? ? ? b.issuperset(a)-->True
一個集合是本身的超集:a>=a -->True?
使用 > 還可以找到一個集合的真超集(第一個集合包含第二個集合的所有元素且還包含其他元素):b={1,2,3}? a={1,2}? b>a-->True
至此我們學完了列表,集合,元組,字典。它們之間可以隨意的組合稱大型數據結構,唯一的限制來自這些內置數據類型本身。比如,字典的鍵必須是不可變對象,因此列表,字典以及集合都不可以作為字典的鍵,但元組可以作為字典的鍵。
注:本文內容來自《Python語言及其應用》歡迎購買原書閱讀