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

首頁 > 編程 > Python > 正文

Python進階篇之字典操作總結

2020-02-23 04:08:15
字體:
來源:轉載
供稿:網友

一、與字典值有關的計算

問題

想對字典的值進行相關計算,例如找出字典里對應值最大(最小)的項。

解決方案一:

假設要從字典 {'a':3, 'b':2, 'c':6} 中找出值最小的項,可以這樣做:

>>> d = {'a':3, 'b':2, 'c':6}>>> min(zip(d.values(), d.keys()))(2, 'b')

值得注意的是  d.values() 獲取字典的全部值,d.keys() 獲取字典的全部鍵,而且兩個序列的順序依然保持一一對應的關系。因此 zip(d.values() , d.keys()) 實質上生成的是一個 (value, key) 的序列。min 函數通過比較序列中的元組 (value, key) 找出其最小值。

解決方案二:

除了使用 zip(d.values() ,  d.keys()) 外,還可以使用 dict.items() 方法和生成器推導式來生成 (value, key) 序列,從而傳遞給 min 函數進行比較:

>>> d = {'a':3, 'b':2, 'c':6}>>> min((v ,k) for (k, v) in d.items())(2, 'b')

這里 min 函數的參數 (v ,k) for (k, v) in d.items() 其實是一個生成器推導式(和列表推導式一樣,只是把列表推導式的 [] 改為 () ,而且其返回的一個生成器而非列表),由于生成器推導式做為 min 函數的參數,所以可以省略掉兩邊的括號(不做為參數時寫法應該是 ((v ,k) for (k, v) in d.items()) ) 。

二、字典推導式

問題

想把一個元組列表轉換成一個字典,例如把 [('a', 1), ('b', 2), ('c', 3)] 轉化為 {'a': 1, 'b': 2, 'c': 3}

解決方案

類似于列表推導式,字典推導式可以方便地從其他數據結構構造字典,例如:

>>> l = [('a', 1), ('b', 2), ('c', 3)]>>> {k: v for k, v in l}{'c': 3, 'b': 2, 'a': 1}

字典推導式的規則和列表推導式一樣,只是把 [] 換成 {}

三、尋找字典的交集

問題

假設有兩個字典:

d1 = {'a':1, 'b':2, 'c':3, 'd':4}d2 = {'b':2, 'c':3, 'd':3, 'e':5}

要找出這兩個字典中具有公共鍵的項,即要得到結果 {'b':2, 'c':3}

解決方案

我們知道一般通過 d.items() 方法來遍歷字典,d.items() 方法返回的對象是一個類集合對象,支持集合的基本運算,如取交集、并集等。

>>> dict(d1.items() & d2.items()) # 取交集{'b': 2, 'c': 3}

此外,d.keys() 返回字典的鍵,也是一個類集合對象,如果我們只想找出兩個字典中鍵相同的項,可以這樣:

>>> { k:d1[k] for k in d1.keys() & d2.keys() }{'b': 2, 'd': 4, 'c': 3}

這里如果相同的鍵對應不同的值則去第一個字典中的值。推廣開來,如果想排除掉字典中的某些鍵,可以這樣:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永靖县| 遂溪县| 丰镇市| 定日县| 锡林郭勒盟| 德令哈市| 临夏县| 玉田县| 弋阳县| 文水县| 团风县| 太湖县| 株洲市| 白朗县| 伊金霍洛旗| 栾城县| 纳雍县| 济阳县| 临桂县| 京山县| 腾冲县| 西林县| 永靖县| 泊头市| 浏阳市| 南乐县| 十堰市| 琼海市| 鄂伦春自治旗| 怀柔区| 建阳市| 阆中市| 高平市| 东辽县| 水城县| 紫云| 阿城市| 黄平县| 拜城县| 龙游县| 汝南县|