国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

關于Python數據結構中字典的心得

2020-02-16 10:56:06
字體:
來源:轉載
供稿:網友

本篇主要介紹:常見的字典方法、如何處理查不到的鍵、標準庫中 dict 類型的變種、散列表的工作原理等。一下是全部內容:

泛映射類型

collections.abc 模塊中有 Mapping 和 MutableMapping 這兩個抽象基類,它們的作用是為 dict 和其他類似的類型定義形式接口。

標準庫里所有映射類型都是利用 dict 來實現的,它們有個共同的限制,即只有可散列的數據類型才能用做這些映射里的鍵。

問題: 什么是可散列的數據類型?

在 python 詞匯表(https://docs.python.org/3/glossary.html#term-hashable)中,關于可散列類型的定義是這樣的:

如果一個對象是可散列的,那么在這個對象的生命周期中,它的散列值是不變的,而且這個對象需要實現 __hash__() 方法。另外可散列對象還要有 __eq__() 方法,這樣才能跟其他鍵做比較。如果兩個可散列對象是相等的,那么它們的散列只一定是一樣的

根據這個定義,原子不可變類型(str,bytes和數值類型)都是可散列類型,frozenset 也是可散列的(因為根據其定義,frozenset 里只能容納可散列類型),如果元組內都是可散列類型的話,元組也是可散列的(元組雖然是不可變類型,但如果它里面的元素是可變類型,這種元組也不能被認為是不可變的)。

一般來講,用戶自定義的類型的對象都是可散列的,散列值就是它們的 id() 函數的返回值,所以這些對象在比較的時候都是不相等的。(如果一個對象實現了 eq 方法,并且在方法中用到了這個對象的內部狀態的話,那么只有當所有這些內部狀態都是不可變的情況下,這個對象才是可散列的。)

根據這些定義,字典提供了很多種構造方法,https://docs.python.org/3/library/stdtypes.html#mapping-types-dict 這個頁面有個例子來說明創建字典的不同方式。

>>> a = dict(one=1, two=2, three=3)>>> b = {'one': 1, 'two': 2, 'three': 3}>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))>>> d = dict([('two', 2), ('one', 1), ('three', 3)])>>> e = dict({'three': 3, 'one': 1, 'two': 2})>>> a == b == c == d == eTrue

除了這些方法以外,還可以用字典推導的方式來建造新 dict。

字典推導

自 Python2.7 以來,列表推導和生成器表達式的概念就移植到了字典上,從而有了字典推導。字典推導(dictcomp)可以從任何以鍵值對作為元素的可迭代對象中構建出字典。

比如:

>>> data = [(1, 'a'), (2, 'b'), (3, 'c')]>>> data_dict = {num: letter for num, letter in data}>>> data_dict{1: 'a', 2: 'b', 3: 'c'}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 顺昌县| 西乌珠穆沁旗| 上虞市| 乐都县| 胶南市| 东乡| 沙洋县| 遂川县| 射洪县| 和林格尔县| 曲阳县| 仙游县| 台州市| 黄山市| 民乐县| 盐津县| 大理市| 临海市| 普定县| 贵阳市| 哈尔滨市| 达尔| 嘉善县| 安化县| 张家口市| 绥芬河市| 庆安县| 武清区| 饶河县| 靖宇县| 丰县| 沅陵县| 蓝山县| 青冈县| 柳林县| 东乡族自治县| 嵊州市| 漯河市| 惠来县| 尼木县| 长阳|