说明:
显然python中字典的学习过程与列表是一样的,主要是围绕下面的函数来进行重点学习:
1
2
3
4
5
6
7
8
9
10
11
<code>>>> 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>>>> 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>>>> 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>>>> xpleaf[</code><code>'hobby'</code><code>]</code>
<code>'computer'</code>
--修改键值对应的内容
<code>>>> 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>>>> 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>>>> xpleaf.has_key(</code><code>'dream'</code><code>)</code>
<code>true</code>
<code>>>> xpleaf.has_key(</code><code>'wife'</code><code>)</code>
<code>false</code>
3.items()函数
·功能:将字典转换为列表,列表的元素为元组,其中左元素为key,右元素为value;
<code>>>> 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>>>> </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>>>> </code><code>for</code> <code>key </code><code>in</code> <code>xpleaf:</code>
<code>... print key,xpleaf[key]</code>
4.get()函数
·功能:取对应key的value值;
<code>>>> xpleaf.</code><code>get</code><code>(</code><code>'dream'</code><code>)</code>
<code>'excellent hacker'</code>
<code>>>> xpleaf.</code><code>get</code><code>(</code><code>'wife'</code><code>) ===>如果没有该key值则不会有输出</code>
<code>>>></code>
·即相当于dict[key]的方法取value值;
5.keys()函数
·功能:取出字典中的key值,并生成相应的列表;
<code>>>> 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>>>> xpleaf.pop(</code><code>'girlfriend'</code><code>)</code>
<code>'none'</code>
6.popitem()函数
·功能:按顺序删除字典中的元素;
12
13
14
<code>>>> 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>>>> 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>>>> xpleaf.setdefault(</code><code>'hobby'</code><code>,</code><code>'computer'</code><code>) ===></code><code>'hobby'</code><code>键值对已经存在,不会添加</code>
<code>'it'</code>
<code>>>> xpleaf.setdefault(</code><code>'weight'</code><code>,</code><code>'55kg'</code><code>) ===></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>>>> xpleaf.setdefault(</code><code>'wife'</code><code>) ===>添加没有的键值对,</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>>>> 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>>>> 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>>>> 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>>>> 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>>>> 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>>>> a.clear()</code>
<code>{}</code>
·与del不同,del是直接删除字典:
<code>>>> del a</code>
<code>traceback (most recent call last):</code>
<code> </code><code>file </code><code>"<stdin>"</code><code>, line </code><code>1</code><code>, </code><code>in</code> <code><module></code>
<code>nameerror: name </code><code>'a'</code> <code>is</code> <code>not defined</code>
11.copy()函数
·功能:对字典进行浅复制;
·python中普通情况下的“复制”:
<code>>>> xpleaf_copy = xpleaf</code>
<code>>>> xpleaf_copy</code>
<code>>>> 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>>>> 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>>>> xpleaf_copy2 = xpleaf.copy()</code>
<code>>>> xpleaf_copy2</code>
<code>>>> 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()更重要的作用不仅在于此,这里只是简单提及它的作用。