1. 程式人生 > >[Python入門及進階筆記]Python-基礎-字典小結

[Python入門及進階筆記]Python-基礎-字典小結

部落格遷往:新地址(點選直達)

新部落格使用markdown維護,線下有版本庫,自己寫的所以會定時更新同步,同時提供更好的導航和閱讀體驗

csdn對markdown支援不好,所以舊版不會花時間進行同步修訂,抱歉


-----------------------

字典

定義

dictionary

1.鍵值對的集合(map)

2.字典是以大括號“{}”包圍的資料集合

3.字典是無序的,在字典中通過鍵來訪問成員。 可變的,可巢狀,可以原處修改擴充套件等,不產生新的字典

4.字典的鍵,可以是字串(大小寫敏感),數字常量或元組(不可變型別),同一個字典的鍵可以混用型別。字典的鍵必須是可雜湊的

元組作為鍵的條件是,元組內的值都是不可變型別

  a = (1,2)  #可以作為鍵
  b = (1,2,[3,4])  #不可以

5.字典的值可以是任意型別,可以巢狀,可以自由修改

宣告

建立字典的幾種方式:

1.基本

d = {} #空字典
d = {'name':'tom', 'age':22} 
#等價
d = {}
d['name'] = 'tom'
d['age'] = 22

2.dict

d = dict() #空
d = dict(name='tom', age=22)   

d = dict([('name','tom'), ('age',22)])
#等價
keys = ['name','age']
values = ['tom', 22]
d = dict(zip(keys,values))

3.fromkeys

不指定default_value的話,預設None

>>> dict.fromkeys(['name','age'],'default_value')
{'age': 'default_value', 'name': 'default_value'}

基本操作

0.獲取幫助

help(dict)

1.判定鍵是否存在於字典中

if k in d:   #k not in
    dosomething()

2.讀取

d = {'a':1, 'b':2}

print d['a']  #得到1,但是若鍵不存在,將引發異常KeyError。慎用,建議不使用

print d.get('c', 3) #得到3,get方法,若是鍵不存在,返回第二個引數default_value.若是沒有設default_value返回None

處理missing-key錯誤三種方式,根據具體需要

if k in d:
    print d[k]

try:
    print d[k]
except KeyError:
    dosomething()

print d.get(k, default)
#等價 d[k] if k in d else default

3.遍歷

方式1:

for key in d:
    print key, d[key]
#等價 for key in d.keys()

方式2:

for key,value in d.items():
    print key, value

4.修改方式1:某個鍵值對

d['key'] = 'newvalue'

方式2:批量新增或更新

#另一個字典
d.update({'key':'newvalue'})  #這裡支援一整組值

#元組列表
d.update( [ ('a',1), ('b',2) ] ) #每個元組兩個元素,(key,value)

#**key
d.update(c=3, e=4) 

5.刪除

del d['key']
value = d.pop('key') #刪除並返回值
d.clear() #清空

6.其他:

len(d)   #長度
d.keys()  #key列表
d.values()  #value列表
d.items()   #(key, value) 列表
c = d.copy()   #淺拷貝
#返回迭代器,節省記憶體
d.iterkeys()
d.itervalues()
d.iteritems()
d.setdefault('name', 'ken') #若原來沒有,設定,否則原值不變

其他

1.字典排序按照key排序

keys = d.keys()
keys.sort()
for key in keys:
    print d.get(key)

按照value進行排序

sorted(d.items(), lambda x,y: cmp(x[1],y[1]))

另外:

#假設d為字典
sorted(d)  #返回同 sorted(d.keys()),返回的是key排序

2.自定義物件作為key

必須:

def __hash__(self):
    pass
def __eq__(self, other):
    pass

3.字典拷貝淺拷貝:

c = d.copy() #

深拷貝必須用copy模組

form copy import deepcopy
c = deepcopy(d)

4.一種使用場景假設有一個很大的列表l,假設10w條記錄

有一個小列表b,要判斷b中元素是否在l中

如果:

for i in b:
    if i in l:
        dosomething()

你會發現非常非常慢...因為第二個in語句,會遍歷10w條….

改進:

d = dict.fromkeys(l)
for i in b:
    if i in d:
        dosomething()
#空間換時間,O(n) -> O(1)

The end!

To be continue

wklken

Email: [email protected]

Blog: http://blog.csdn.net/wklken

2013-03-09

轉載請註明出處,謝謝

相關推薦

[Python入門筆記]Python-基礎-字串小結

部落格遷往:新地址 (點選直達) 新部落格使用markdown維護,線下有版本庫,自己寫的所以會定時更新同步,同時提供更好的導航和閱讀體驗 csdn對markdown支援不好,所以舊版不會花時間進行同步修訂,抱歉 ------------------------ 字串 簡

[Python入門筆記]Python-基礎-集合小結

<style> <!-- h1, h2, h3, h4, h5, h6, p, blockquote {margin:0; padding:0} body {font-family:"Helvet

[Python入門筆記]Python-基礎-數字小結

<style> <!-- h1, h2, h3, h4, h5, h6, p, blockquote {margin:0; padding:0} body {font-family:"Helvet

[Python入門筆記]Python-基礎-函式小結

部落格遷往:新地址 (點選直達) 新部落格使用markdown維護,線下有版本庫,自己寫的所以會定時更新同步,同時提供更好的導航和閱讀體驗 csdn對markdown支援不好,所以舊版不會花時間進行同步修訂,抱歉 ----------------- 函式 簡介及定義 簡介

[Python入門筆記]Python-基礎-字典小結

部落格遷往:新地址(點選直達) 新部落格使用markdown維護,線下有版本庫,自己寫的所以會定時更新同步,同時提供更好的導航和閱讀體驗 csdn對markdown支援不好,所以舊版不會花時間進行同步修訂,抱歉 ----------------------- 字典 定義

[Python入門筆記00]-寫在前面(目錄/書籍/學習路線/其他)

最新系列在 入口 =============================================    學習Python有一段時間了,需要來一個階段性總結了     個人看書的模式是,一邊看書,一邊敲程式碼,一遍記筆記(record for search

標號(11):python(就業階段)——javascript入門

<1>javascript介紹 1、JavaScript是執行在瀏覽器端的指令碼語言 2、JavaScript主要解決的是前端與使用者互動的問題,包括使用互動與資料互動,JavaScript是瀏覽器解釋執行的。 3、瀏覽器彈窗 <script> alert(

python前端JavaScript入門

知識點預習 1、js基本使用2、js變數定義及型別 3、js函式定義及預解析 4、js獲取標籤 5、js讀寫標籤屬性 00-JavaScript簡介 JavaScript是執行在瀏覽器端的腳步語言,JavaScript主要解決的是前端與使用者互動的問題,包括使用互動與資料互動。 JavaScri

python入門篇(六)之高階語法用法

    高階知識針對包、類庫的開發者,函式只是一段可執行的程式碼 並不是物件,閉包、函數語言程式設計 閉包=函式+環境變數 a=10 def outer(): a=25 def inner(x): print(a*x*x) retu

限時領取 | 人工智慧入門必讀Python書籍PDF!

Python是一門簡單易學,功能強大的程式語言。它具有高效的高階資料結構和簡單而有效的面向物件程式設計方法。Python優雅的語法和動態型別以及其解釋性的性質,使它在許多領域和大多數平臺成為編寫指令碼和快速應用程式開發的理想語言。今天小編就給大家推薦3本Python相關的書籍。(想獲取本書電子版可以

python入門篇(二)之變數和運算子

變數 變數的命名規則:    字母、數字、下劃線組成,   系統關鍵字不能在變數名中 如and、if、import   變數名區分大小寫   變數沒有型別限制 同js   系統方法名建議不用來做變數名,避免造成衝突 如type print   Int str t

python入門篇(四)之包、模組、函式與變數作用域

python專案的組織結構 包(資料夾)-->模組(檔案)-->類-->函式和變數   seven.c4、six.c4:(seven)包名.模組名(c4) 構成名稱空間 seven包的結構: seven    --t(子包)        --

Python入門,這本書有什麼不同?

人們常說Python語言簡單,編寫簡單程式時好像也確實如此。但實際上Python絕不簡單,它也是一種很複雜的語言,其功能特徵非常豐富,能支援多種程式設計風格,在幾乎所有方面都能深度定製。要想用好Python,用它解決複雜問題,開發功能正確的、效率高的程式,需要很好地理解上面說

Python如何賺錢? python爬蟲如何python就業? 如何快速入門python? .....

1、如何快速入門 Python ? 我之前給大家說過,速成一門技能是不可能的,你需要花很多時間才能真正的掌握一門技能,但是快速入

全面解讀JavaScript入門,100%基礎知識掌握!

isnan cookies dom 事件 document 動態 情況 blue tint mat 一、JavaScript 簡介 1、JavaScript 是 Web 的編程語言,是前端開發必須掌握的三門語言之一,即: HTML 定義了網頁的內容 CSS

最新玩轉資料結構從入門 資料結構基礎

第1章 歡迎學習《玩轉資料結構》歡迎大家學習《玩轉資料結構》課程。在這個課程中,我們將從底層實現諸多資料結構,從簡單,到複雜,並且探索他們的應用。在這一章,我們將來看一看資料結構的具體作用,學習資料結構的誤區,學習這個課程的注意事項,和課程環境的基本搭建:) ...第2章 不要小瞧陣列陣列,看似是最

程式語言入門、設計模式、面向物件書籍

1. Python Python 基礎教程 Automate the Boring Stuff with Python(繁瑣工作自動化) 前六章,python 語言基礎; 其後便是一些自動化實現

System.Web.Routing入門 下篇

上面介紹的是最簡單的一種定義方式。當然我們可以建立更復雜的規則。其中就包括設定規則的預設值以及設定規則的正則表示式。 UrlRouting高階應用 預計效果: 當我訪問/a/b.aspx時就會轉到Default.aspx?category=a&action=b在頁面上顯示 cate

System.Web.Routing入門 上篇

System.Web.Routing已經作為一個程式集包含在.net3.5sp1中釋出了。雖然我們並沒有在3.5sp1中發現Asp.net Mvc的蹤跡,但是亦以感覺到它離我們不遠了。 System.Web.Routing用於在Asp.net的Web應用程式中進行URLRouting。 所謂UrlRo

Python3入門筆記(三):迴圈

表示式的優先順序:    例:        a=1        b=2        c=2        not a or b + 2 == c + 2 結果為 True,等價於 ( ( not a ) or ( b + 2 ) ) == ( c + 2 )迴圈