一、字典(dict) 1. 概述 字典是Python唯一的映射類型。 只能使用不可變的對象(比如字元串)來作為字典的鍵,但是可以把不可變或可變的對象作為字典的值。 鍵值對在字典中以這樣的方式標記:d = key1 : value1, key2 : value2 。註意它們的鍵/值...
一、字典(dict)
1. 概述
字典是Python唯一的映射類型。
只能使用不可變的對象(比如字元串)來作為字典的鍵,但是可以把不可變或可變的對象作為字典的值。
鍵值對在字典中以這樣的方式標記:d = key1 : value1, key2 : value2 。註意它們的鍵/值對用冒號分割,而各個對用逗號分割,
所有這些都包括在花括弧中。
字典中的鍵/值對是沒有順序的。
字典是 dict 類的實例/對象。
2. 創建與訪問
直接通過花括弧括起來鍵/值對來創建。可以這樣來創建空字典。字典可以索引,只不過索引值是鍵值。
利用內置函數 dict() 來創建字典,註意整個函數只有一個參數,如下:
dict3 = dict((('F',70), ('i',105), ('h',115), ('c',67))),只要能讓它找到映射關係就OK。
還可以指定關鍵字參數來創建字典:
dict4 = dict(Turing = '讓編程改變世界'),註意此時鍵即 Turing 不能加引號,會報錯。
對於字典還可以通過鍵來修改值,如果存在這個鍵,就會修改其值,如果根本不存在這個鍵,就會再添加一個鍵/值對。如:
dict4[‘ Turing ’] = ‘ 大家一起來編程’
dict4[' Edison '] = ' 大發明家'
>>>dict4
{'Turing': '大家一起來編程', 'Edison': '大發明家'}。
3. 字典的內置方法
1) fromkeys()
>>> dict1 = {}
>>> dict1.fromkeys((1,2,3))
{1: None, 2: None, 3: None}
>>> dict1.fromkeys((1,2,3), 'Number')
{1: 'Number', 2: 'Number', 3: 'Number'}
>>> dict1.fromkeys((1,2,3),('one','two','three'))
{1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}
>>>dict1.fromkeys((1,3),'數字')
{1: '數字', 3: '數字'}
fromkeys方法用來創建一個字典,有兩個參數,一個是鍵,一個是值。註意第二個參數都會賦給所有的鍵,沒有聰明的一一對應。
沒有辦法通過這個辦法修改鍵的值,強制修改的話會創建一個新的字典。
2)keys() values() items()
分別遍歷鍵、值、項。
3)get()
當索引並不是字典中的鍵時,訪問輸出時會出錯,用get()方法可以巧妙的解決這個問題。
>>> print(dict2[31])
贊
>>> print(dict2[32])
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
print(dict2[32])
KeyError: 32
>>> dict2.get(32)
>>> print(dict2.get(32))
None
>>> dict2.get(32,'木有')
'木有'
>>> dict2.get(31,'木有')
'贊'
4)clear()
清空字典。如果直接把想要清空的字典賦給空字典,和clear()方法還是有很多不同的,有時候可能有威脅,還是使用clear()方法。
>>> dict2.clear()
>>> dict2
{}
>>> dict2 = {}
>>> a = {'你好': '哈哈'}
>>> b = a
>>> b
{'你好': '哈哈'}
>>> a = {}
>>> b
{'你好': '哈哈'}
>>> a = b
>>> a
{'你好': '哈哈'}
>>> b
{'你好': '哈哈'}
>>> a.clear()
>>> a
{}
>>> b
{}
5)copy()
淺拷貝,和賦值操作的不同看代碼:
>>> a = {1:'one',2:'two',3:'three'}
>>> b = a.copy()
>>> c = a
>>> c
{1: 'one', 2: 'two', 3: 'three'}
>>> a
{1: 'one', 2: 'two', 3: 'three'}
>>> b
{1: 'one', 2: 'two', 3: 'three'}
>>> id(a)
57877832
>>> id(b)
57838536
>>> id(c)
57877832
6) pop() 與 popitem()
一個是彈出值,一個是彈出項,後者是隨機彈出的。
>>> a.pop(2)
'two'
>>> a
{1: 'one', 3: 'three'}
>>> a.popitem()
(1, 'one')
7) setdefault()
添加鍵或添加鍵/值對。如:
(註:添加後的順序隨機)
>>> a.setdefault('sq')
>>> a
{'sq': None, 3: 'three'}
>>> a.setdefault(5,'five')
>>> a
{3: 'three', 5: 'five', 'sq': None}
8) update()
用字典來更新字典,如果參數字典中的鍵原字典有就更新其值,沒有就自動添加上去新鍵。
二、集合(set)
1. 概述
集合是字典的“表親”,花括弧不只是字典的特權。當用花括弧括起來一堆沒有映射關係的元素時就創建了一個集合。
>>> num2 = {1, 2, 3, 4}
>>> type(num2)
<class 'set'>
2. 和數學中的概念一樣,集合具有互異性,無序性(因此集合無法用於索引)。
>>> num= {1, 2, 3, 4, 6, 3, 2}
>>> num
{1, 2, 3, 4, 6}
>>> num[2]
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
num[2]
TypeError: 'set' object does not support indexing
3. 內置工廠函數 set() 可以用來創建集合,參數可以是列表,元組,甚至是字元串。
>>> set1 = set([1,2,3, 4,5])
>>> set1
{1, 2, 3, 4, 5}
4. 因為集合的互異性,反而給序列中去除相同的元素提供了一個巧妙的方法。
list2 = list(set(list1))
缺點是無法保證和原序列同樣的順序,慎用。
5. 集合的內置方法 add() remove()
創建不可變集合的函數 frozenset().
6. 其他常見集合內建方法總結