字典是使用最為廣泛的數(shù)據(jù)結(jié)構(gòu)了,從結(jié)構(gòu)來看,其內(nèi)容就是鍵值對,鍵稱為key, 值稱為value, 類似詞典中通過前面的索引來快速查找后面的頁面,通過key可以快速定位對應(yīng)的值。字典,是python中對這種結(jié)構(gòu)的命名,在其他語言中有其他的名字,比如perl中稱之為哈希。
字典通過大括號或者dict函數(shù)來創(chuàng)建,用法如下
>>> a = {'one':1, 'tow':2, 'three':3}
>>> a
{'one': 1, 'tow': 2, 'three': 3}
>>> type(a)
<class 'dict'>
key和value之間用冒號分隔,多個鍵值對用逗號分隔。上述字典用dict
函數(shù)創(chuàng)建的代碼如下
>>> a = dict((('one',1), ('tow',2), ('three',3)))
>>> a
{'one': 1, 'tow': 2, 'three': 3}
>>>
>>> a = dict(zip(['one', 'tow', 'three'], [1, 2, 3]))
>>> a
{'one': 1, 'tow': 2, 'three': 3}
>>>
>>>
>>> a = dict({'one':1, 'tow':2, 'three':3})
>>> a
{'one': 1, 'tow': 2, 'three': 3}
可以看到,dict函數(shù)更加靈活,支持多種寫法。字典中的key是無序且唯一的,不存在數(shù)字下標索引,要訪問其中的值,只能通過key來訪問,用法如下
>>> a = {'one':1, 'tow':2, 'three':3}
>>> a['one']
1
關(guān)于字典,內(nèi)置了很多方法和函數(shù),常用的幾種如下
# 方括號加下標
>>> a = {'one':1, 'tow':2, 'three':3}
>>> a['one']
1
# get方法
>>> a.get('one')
1
# 可以重新賦值,也可以新增值
>>> a = {'one':1, 'tow':2, 'three':3}
>>> a['one'] = 2
>>> a
{'one': 2, 'tow': 2, 'three': 3}
# del 刪除元素
>>> del a['one']
# pop刪除元素
>>> a.pop("tow")
# 清空字典
>>> a.clear()
當我們遍歷字典的時候,本質(zhì)是在遍歷字典的key和value, 通過以下函數(shù)可以方便的獲得字典的key或者value
# 返回所有key的列表
>>> a.keys()
dict_keys(['one', 'tow', 'three'])
# 返回所有values的列表
>>> a.values()
dict_values([1, 2, 3])
# 返回(key, value)構(gòu)成的元組序列
>>> a.items()
dict_items([('one', 1), ('tow', 2), ('three', 3)])
# 返回所有key的列表
>>> list(a)
['one', 'tow', 'three']
# 返回所有key構(gòu)成的迭代器
>>> iter(a)
<dict_keyiterator object at 0x035A9D20>
>>> for i in iter(a):
... print(i)
...
one
tow
three
在perl中,哈希的key都是字符串,而在python中,字典的key非常靈活,只要是不可變的對象都可以,比如數(shù)字,字符串,元組。利用元組,可以模擬多維字典,用法如下
>>> a = {(1, 2):'one', (3, 4):'tow'}
>>> a[(1,2)]
'one'
上面就是字典的基本用法,掌握了基礎(chǔ),我們來看兩個在實際中經(jīng)常使用的進階版字典
python中不僅key很靈活,其value也很靈活。比如我們想要創(chuàng)建一個value為列表的字典,也是可以的
>>> a = {'one' : [1, 2, 3, 4, 5], 'tow':[1, 2, 3, 4, 5]}
>>> a
{'one': [1, 2, 3, 4, 5], 'tow': [1, 2, 3, 4, 5]}
>>> a['one']
[1, 2, 3, 4, 5]
直接寫,當然沒什么難度,但是在實際工作中,經(jīng)典的使用場景是循環(huán)給字典賦值,如果要實現(xiàn)值為列表,必須先將值設(shè)為一個空的列表,用法如下
>>> num = [1, 2, 3, 4, 5]
>>> a = {}
# 直接添加,報錯
>>> for i in num:
... a['one'].append(i)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
KeyError: 'one'
# 先設(shè)定為空列表,在追加
# 結(jié)果ok
>>> a['one'] = []
>>> for i in num:
... a['one'].append(i)
...
>>>
>>> a
{'one': [1, 2, 3, 4, 5]}
可以看出,關(guān)鍵的問題是value的默認值,由于默認值不是列表,所以直接用append方法會報錯。為了解決問題,只需要將默認值設(shè)為列表就可以了。python有一個內(nèi)置模塊collections, 提供了defaultdict函數(shù),可以方便的設(shè)置默認值,用法如下
>>> from collections import defaultdict
>>> # 這里的list表明key的默認value為list
>>> a = defaultdict(list)
>>> for i in num:
... a['one'].append(i)
...
>>>
>>> a
defaultdict(<class 'list'>, {'one': [1, 2, 3, 4, 5]})
用這種寫法更加優(yōu)雅。
所謂嵌套,就是有多級key, 類似
a[key1][key2] = value
通過設(shè)置value的默認值為dict, 可以方便的實現(xiàn)嵌套字典,用法如下
>>> a = defaultdict(dict)
>>> a['one']['tow'] = 1
>>> a['one']['three'] = 2
>>> a
defaultdict(<class 'dict'>, {'one': {'tow': 1, 'three': 2}})
上述寫法只支持兩個key的嵌套 在實際工作中已經(jīng)可以滿足需求了,兩層以上的嵌套幾乎用不到。
·end·
聯(lián)系客服