天天看點

【Python之旅】第二篇(四):字典

說明:

    顯然python中字典的學習過程與清單是一樣的,主要是圍繞下面的函數來進行重點學習:

1

2

3

4

5

6

7

8

9

10

11

<code>&gt;&gt;&gt; xpleaf.</code>

<code>xpleaf.clear(</code>

<code>xpleaf.copy(</code>

<code>xpleaf.</code><code>get</code><code>(</code>

<code>xpleaf.has_key(</code>

<code>xpleaf.items(</code>

<code>xpleaf.keys(</code>

<code>xpleaf.pop(</code>

<code>xpleaf.popitem(</code>

<code>xpleaf.setdefault(</code>

<code>xpleaf.update(</code>

1.基本操作

--建立一個字典

<code>&gt;&gt;&gt; xpleaf = {</code>

<code>...         </code><code>'name'</code><code>:</code><code>'xpleaf'</code><code>,</code>

<code>...         </code><code>'occupation'</code><code>:</code><code>'student'</code><code>,</code>

<code>...         </code><code>'hobby'</code><code>:</code><code>'computer'</code><code>,</code>

<code>...         </code><code>'dream'</code><code>:</code><code>'excellent hacker'</code>

<code>... }</code>

<code>&gt;&gt;&gt; xpleaf</code>

<code>{</code><code>'hobby'</code><code>: </code><code>'computer'</code><code>, </code><code>'dream'</code><code>: </code><code>'excellent hacker'</code><code>, </code><code>'name'</code><code>: </code><code>'xpleaf'</code><code>, </code><code>'occupation'</code><code>: </code><code>'student'</code><code>}</code>

·容易觀察到字典的輸出并沒有按照建立字典時的順序進行輸出,因為字典按哈希值查找内容,而不是按索引号;

·{key:value}是字典的基本文法格式,key是唯一的,value可為大多數資料類型;

--檢視鍵值對應的内容

<code>&gt;&gt;&gt; xpleaf[</code><code>'hobby'</code><code>]</code>

<code>'computer'</code>

--修改鍵值對應的内容

<code>&gt;&gt;&gt; xpleaf[</code><code>'hobby'</code><code>] = </code><code>'it'</code>

<code>{</code><code>'hobby'</code><code>: </code><code>'it'</code><code>, </code><code>'dream'</code><code>: </code><code>'excellent hacker'</code><code>, </code><code>'name'</code><code>: </code><code>'xpleaf'</code><code>, </code><code>'occupation'</code><code>: </code><code>'student'</code><code>}</code>

--添加一個鍵值對

<code>&gt;&gt;&gt; xpleaf[</code><code>'girlfriend'</code><code>] = </code><code>'none'</code>

<code>{</code><code>'girlfriend'</code><code>: </code><code>'none'</code><code>, </code><code>'hobby'</code><code>: </code><code>'it'</code><code>, </code><code>'dream'</code><code>: </code><code>'excellent hacker'</code><code>, </code><code>'name'</code><code>: </code><code>'xpleaf'</code><code>, </code><code>'occupation'</code><code>: </code><code>'student'</code><code>}</code>

·添加的元素在字典中的排序是随機的,因為索引号對字典沒有意義(按照哈希值進行value值的查找);

2.has_key()函數

·功能:接受key的查詢,以bool值形式傳回查詢字典中是否有該key;

·示範如下:

<code>&gt;&gt;&gt; xpleaf.has_key(</code><code>'dream'</code><code>)</code>

<code>true</code>

<code>&gt;&gt;&gt; xpleaf.has_key(</code><code>'wife'</code><code>)</code>

<code>false</code>

3.items()函數

·功能:将字典轉換為清單,清單的元素為元組,其中左元素為key,右元素為value;

<code>&gt;&gt;&gt; xpleaf.items()</code>

<code>[(</code><code>'girlfriend'</code><code>, </code><code>'none'</code><code>), (</code><code>'hobby'</code><code>, </code><code>'it'</code><code>), (</code><code>'dream'</code><code>, </code><code>'excellent hacker'</code><code>), (</code><code>'name'</code><code>, </code><code>'xpleaf'</code><code>), (</code><code>'occupation'</code><code>, </code><code>'student'</code><code>)]</code>

·基于上述輸出形式,可對字典的key和value進行周遊,如下:

<code>&gt;&gt;&gt; </code><code>for</code> <code>key,value </code><code>in</code> <code>xpleaf.items():</code>

<code>...   print key,value</code>

<code>... </code>

<code>girlfriend none</code>

<code>hobby it</code>

<code>dream excellent hacker</code>

<code>name xpleaf</code>

<code>occupation student</code>

·item()函數的原理是把字典轉換為清單存儲在記憶體中,對于資料量大的情況下,會比較慢;

·大資料量的字典周遊方法:

<code>&gt;&gt;&gt; </code><code>for</code> <code>key </code><code>in</code> <code>xpleaf:</code>

<code>...   print key,xpleaf[key]</code>

4.get()函數

·功能:取對應key的value值;

<code>&gt;&gt;&gt; xpleaf.</code><code>get</code><code>(</code><code>'dream'</code><code>)</code>

<code>'excellent hacker'</code>

<code>&gt;&gt;&gt; xpleaf.</code><code>get</code><code>(</code><code>'wife'</code><code>)    ===&gt;如果沒有該key值則不會有輸出</code>

<code>&gt;&gt;&gt;</code>

·即相當于dict[key]的方法取value值;

5.keys()函數

·功能:取出字典中的key值,并生成相應的清單;

<code>&gt;&gt;&gt; xpleaf.keys()</code>

<code>[</code><code>'girlfriend'</code><code>, </code><code>'hobby'</code><code>, </code><code>'dream'</code><code>, </code><code>'name'</code><code>, </code><code>'occupation'</code><code>]</code>

5.pop()函數

·功能:彈出一個key,即删除一個鍵值對;

<code>&gt;&gt;&gt; xpleaf.pop(</code><code>'girlfriend'</code><code>)</code>

<code>'none'</code>

6.popitem()函數

·功能:按順序删除字典中的元素;

12

13

14

<code>&gt;&gt;&gt; a</code>

<code>{</code><code>'a'</code><code>: </code><code>1</code><code>, </code><code>'c'</code><code>: </code><code>3</code><code>, </code><code>'b'</code><code>: </code><code>2</code><code>, </code><code>'e'</code><code>: </code><code>5</code><code>, </code><code>'d'</code><code>: </code><code>4</code><code>, </code><code>6</code><code>: </code><code>'f'</code><code>}</code>

<code>&gt;&gt;&gt; a.popitem()</code>

<code>(</code><code>'a'</code><code>, </code><code>1</code><code>)</code>

<code>(</code><code>'c'</code><code>, </code><code>3</code><code>)</code>

<code>(</code><code>'b'</code><code>, </code><code>2</code><code>)</code>

<code>(</code><code>'e'</code><code>, </code><code>5</code><code>)</code>

<code>(</code><code>'d'</code><code>, </code><code>4</code><code>)</code>

<code>(</code><code>6</code><code>, </code><code>'f'</code><code>)</code>

7.setdefault()函數

·在字典中添加元素,如果原來存在該元素,則不進行任何修改;

<code>&gt;&gt;&gt; xpleaf.setdefault(</code><code>'hobby'</code><code>,</code><code>'computer'</code><code>)    ===&gt;</code><code>'hobby'</code><code>鍵值對已經存在,不會添加</code>

<code>'it'</code>

<code>&gt;&gt;&gt; xpleaf.setdefault(</code><code>'weight'</code><code>,</code><code>'55kg'</code><code>)    ===&gt;</code><code>'weight'</code><code>鍵值對不存在,會進行添加</code>

<code>'55kg'</code>

<code>{</code><code>'name'</code><code>: </code><code>'xpleaf'</code><code>, </code><code>'weight'</code><code>: </code><code>'55kg'</code><code>, </code><code>'hobby'</code><code>: </code><code>'it'</code><code>, </code><code>'dream'</code><code>: </code><code>'excellent hacker'</code><code>, </code><code>'occupation'</code><code>: </code><code>'student'</code><code>}</code>

<code>&gt;&gt;&gt; xpleaf.setdefault(</code><code>'wife'</code><code>)    ===&gt;添加沒有的鍵值對,</code>

<code>{</code><code>'name'</code><code>: </code><code>'xpleaf'</code><code>, </code><code>'weight'</code><code>: </code><code>'55kg'</code><code>, </code><code>'wife'</code><code>: none, </code><code>'hobby'</code><code>: </code><code>'it'</code><code>, </code><code>'dream'</code><code>: </code><code>'excellent hacker'</code><code>, </code><code>'occupation'</code><code>: </code><code>'student'</code><code>}</code>

8.update()函數

·功能:合并兩個字典

<code>{</code><code>'a'</code><code>: </code><code>1</code><code>, </code><code>'c'</code><code>: </code><code>3</code><code>, </code><code>'b'</code><code>: </code><code>2</code><code>}</code>

<code>&gt;&gt;&gt; b</code>

<code>{</code><code>'e'</code><code>: </code><code>4</code><code>, </code><code>'g'</code><code>: </code><code>6</code><code>, </code><code>'f'</code><code>: </code><code>5</code><code>}</code>

<code>&gt;&gt;&gt; a.update(b)</code>

<code>{</code><code>'a'</code><code>: </code><code>1</code><code>, </code><code>'c'</code><code>: </code><code>3</code><code>, </code><code>'b'</code><code>: </code><code>2</code><code>, </code><code>'e'</code><code>: </code><code>4</code><code>, </code><code>'g'</code><code>: </code><code>6</code><code>, </code><code>'f'</code><code>: </code><code>5</code><code>}</code>

·合并的順序依然是随機的,原理與前面一樣;

·更新的隻是字典a,字典b沒有變化;

·如果合并字典時有重複的item項,則會進行覆寫:

<code>&gt;&gt;&gt; c</code>

<code>{</code><code>'b'</code><code>: </code><code>'cover2'</code><code>, </code><code>'g'</code><code>: </code><code>'cover1'</code><code>}</code>

<code>&gt;&gt;&gt; a.update(c)</code>

<code>{</code><code>'a'</code><code>: </code><code>1</code><code>, </code><code>'c'</code><code>: </code><code>3</code><code>, </code><code>'b'</code><code>: </code><code>'cover2'</code><code>, </code><code>'e'</code><code>: </code><code>4</code><code>, </code><code>'g'</code><code>: </code><code>'cover1'</code><code>, </code><code>'f'</code><code>: </code><code>5</code><code>}</code>

9.values()函數

·功能:取字典中所有key的value值,并生成相應的清單

<code>&gt;&gt;&gt; xpleaf.values()</code>

<code>[</code><code>'xpleaf'</code><code>, </code><code>'55kg'</code><code>, none, </code><code>'it'</code><code>, </code><code>'excellent hacker'</code><code>, </code><code>'student'</code><code>]</code>

·多用在value值的資料類型都相同的字典中,以用于資料的批量分析;

10.clear()函數

·功能:清空字典的item項

<code>&gt;&gt;&gt; a.clear()</code>

<code>{}</code>

·與del不同,del是直接删除字典:

<code>&gt;&gt;&gt; del a</code>

<code>traceback (most recent call last):</code>

<code>  </code><code>file </code><code>"&lt;stdin&gt;"</code><code>, line </code><code>1</code><code>, </code><code>in</code> <code>&lt;module&gt;</code>

<code>nameerror: name </code><code>'a'</code> <code>is</code> <code>not defined</code>

11.copy()函數

·功能:對字典進行淺複制;

·python中普通情況下的“複制”:

<code>&gt;&gt;&gt; xpleaf_copy = xpleaf</code>

<code>&gt;&gt;&gt; xpleaf_copy</code>

<code>&gt;&gt;&gt; xpleaf[</code><code>'hobby'</code><code>] = </code><code>'it_field'</code>

<code>{</code><code>'name'</code><code>: </code><code>'xpleaf'</code><code>, </code><code>'weight'</code><code>: </code><code>'55kg'</code><code>, </code><code>'wife'</code><code>: none, </code><code>'hobby'</code><code>: </code><code>'it_field'</code><code>, </code><code>'dream'</code><code>: </code><code>'excellent hacker'</code><code>, </code><code>'occupation'</code><code>: </code><code>'student'</code><code>}</code>

<code>&gt;&gt;&gt; xpleaf_copy[</code><code>'wife'</code><code>] = </code><code>'none!!!'</code>

<code>{</code><code>'name'</code><code>: </code><code>'xpleaf'</code><code>, </code><code>'weight'</code><code>: </code><code>'55kg'</code><code>, </code><code>'wife'</code><code>: </code><code>'none!!!'</code><code>, </code><code>'hobby'</code><code>: </code><code>'it_field'</code><code>, </code><code>'dream'</code><code>: </code><code>'excellent hacker'</code><code>, </code><code>'occupation'</code><code>: </code><code>'student'</code><code>}</code>

·即将變量賦給其它變量隻是将對象(實際的字典)作一個引用傳遞而已,修改任何一個引用都會改變原來對象的值;

·copy()的淺複制功能則不是引用傳遞:

<code>&gt;&gt;&gt; xpleaf_copy2 = xpleaf.copy()</code>

<code>&gt;&gt;&gt; xpleaf_copy2</code>

<code>&gt;&gt;&gt; xpleaf_copy2[</code><code>'wife'</code><code>] = </code><code>'cl'</code>

<code>{</code><code>'name'</code><code>: </code><code>'xpleaf'</code><code>, </code><code>'weight'</code><code>: </code><code>'55kg'</code><code>, </code><code>'wife'</code><code>: </code><code>'cl'</code><code>, </code><code>'hobby'</code><code>: </code><code>'it_field'</code><code>, </code><code>'dream'</code><code>: </code><code>'excellent hacker'</code><code>, </code><code>'occupation'</code><code>: </code><code>'student'</code><code>}</code>

·當然copy()更重要的作用不僅在于此,這裡隻是簡單提及它的作用。