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

说明:

    显然Python中字典的学习过程与列表是一样的,主要是围绕下面的函数来进行重点学习:


1

2

3

4

5

6

7

8

9

10

11

>>> xpleaf.

xpleaf.clear(

xpleaf.copy(

xpleaf.get(

xpleaf.has_key(

xpleaf.items(

xpleaf.keys(

xpleaf.pop(

xpleaf.popitem(

xpleaf.setdefault(

xpleaf.update(


1.基本操作

--创建一个字典


1

2

3

4

5

6

7

8

>>> xpleaf = {

...         'name':'xpleaf',

...         'occupation':'student',

...         'hobby':'computer',

...         'dream':'excellent hacker'

... }

>>> xpleaf

{'hobby''computer''dream''excellent hacker''name''xpleaf''occupation''student'}

·容易观察到字典的输出并没有按照创建字典时的顺序进行输出,因为字典按哈希值查找内容,而不是按索引号;

·{key:value}是字典的基本语法格式,key是唯一的,value可为大多数数据类型;

--查看键值对应的内容


1

2

>>> xpleaf['hobby']

'computer'

--修改键值对应的内容


1

2

3

>>> xpleaf['hobby'] = 'IT'

>>> xpleaf

{'hobby''IT''dream''excellent hacker''name''xpleaf''occupation''student'}

--添加一个键值对


1

2

3

>>> xpleaf['girlfriend'] = 'none'

>>> xpleaf

{'girlfriend''none''hobby''IT''dream''excellent hacker''name''xpleaf''occupation''student'}

·添加的元素在字典中的排序是随机的,因为索引号对字典没有意义(按照哈希值进行value值的查找);


2.has_key()函数

·功能:接受key的查询,以bool值形式返回查询字典中是否有该key;

·演示如下:


1

2

3

4

>>> xpleaf.has_key('dream')

True

>>> xpleaf.has_key('wife')

False


3.items()函数

·功能:将字典转换为列表,列表的元素为元组,其中左元素为key,右元素为value;

·演示如下:


1

2

>>> xpleaf.items()

[('girlfriend''none'), ('hobby''IT'), ('dream''excellent hacker'), ('name''xpleaf'), ('occupation''student')]

·基于上述输出形式,可对字典的key和value进行遍历,如下:


1

2

3

4

5

6

7

8

>>> for key,value in xpleaf.items():

...   print key,value

... 

girlfriend none

hobby IT

dream excellent hacker

name xpleaf

occupation student

·item()函数的原理是把字典转换为列表存储在内存中,对于数据量大的情况下,会比较慢;

·大数据量的字典遍历方法:


1

2

3

4

5

6

7

8

>>> for key in xpleaf:

...   print key,xpleaf[key]

... 

girlfriend none

hobby IT

dream excellent hacker

name xpleaf

occupation student


4.get()函数

·功能:取对应key的value值;

·演示如下:


1

2

3

4

5

6

>>> xpleaf

{'girlfriend''none''hobby''IT''dream''excellent hacker''name''xpleaf''occupation''student'}

>>> xpleaf.get('dream')

'excellent hacker'

>>> xpleaf.get('wife')    ===>如果没有该key值则不会有输出

>>>

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


5.keys()函数

·功能:取出字典中的key值,并生成相应的列表;

·演示如下:


1

2

>>> xpleaf.keys()

['girlfriend''hobby''dream''name''occupation']


5.pop()函数

·功能:弹出一个key,即删除一个键值对;

·演示如下:


1

2

3

4

5

6

>>> xpleaf

{'girlfriend''none''hobby''IT''dream''excellent hacker''name''xpleaf''occupation''student'}

>>> xpleaf.pop('girlfriend')

'none'

>>> xpleaf

{'hobby''IT''dream''excellent hacker''name''xpleaf''occupation''student'}


6.popitem()函数

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

·演示如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

>>> a

{'a'1'c'3'b'2'e'5'd'46'f'}

>>> a.popitem()

('a'1)

>>> a.popitem()

('c'3)

>>> a.popitem()

('b'2)

>>> a.popitem()

('e'5)

>>> a.popitem()

('d'4)

>>> a.popitem()

(6'f')


7.setdefault()函数

·在字典中添加元素,如果原来存在该元素,则不进行任何修改;

·演示如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

>>> xpleaf

{'hobby''IT''dream''excellent hacker''name''xpleaf''occupation''student'}

>>> xpleaf.setdefault('hobby','computer')    ===>'hobby'键值对已经存在,不会添加

'IT'

>>> xpleaf

{'hobby''IT''dream''excellent hacker''name''xpleaf''occupation''student'}

>>> xpleaf.setdefault('weight','55kg')    ===>'weight'键值对不存在,会进行添加

'55kg'

>>> xpleaf

{'name''xpleaf''weight''55kg''hobby''IT''dream''excellent hacker''occupation''student'}

>>> xpleaf.setdefault('wife')    ===>添加没有的键值对,

>>> xpleaf

{'name''xpleaf''weight''55kg''wife': None, 'hobby''IT''dream''excellent hacker''occupation''student'}


8.update()函数

·功能:合并两个字典

·演示如下:


1

2

3

4

5

6

7

8

9

>>> a

{'a'1'c'3'b'2}

>>> b

{'e'4'g'6'f'5}

>>> a.update(b)

>>> a

{'a'1'c'3'b'2'e'4'g'6'f'5}

>>> b

{'e'4'g'6'f'5}

·合并的顺序依然是随机的,原理与前面一样;

·更新的只是字典a,字典b没有变化;

·如果合并字典时有重复的item项,则会进行覆盖:


1

2

3

4

5

6

7

>>> a

{'a'1'c'3'b'2'e'4'g'6'f'5}

>>> c

{'b''cover2''g''cover1'}

>>> a.update(c)

>>> a

{'a'1'c'3'b''cover2''e'4'g''cover1''f'5}


9.values()函数

·功能:取字典中所有key的value值,并生成相应的列表

·演示如下:


1

2

3

4

>>> xpleaf

{'name''xpleaf''weight''55kg''wife': None, 'hobby''IT''dream''excellent hacker''occupation''student'}

>>> xpleaf.values()

['xpleaf''55kg', None, 'IT''excellent hacker''student']

·多用在value值的数据类型都相同的字典中,以用于数据的批量分析;


10.clear()函数

·功能:清空字典的item项

·演示如下:


1

2

3

4

5

>>> a

{'a'1'c'3'b''cover2''e'4'g''cover1''f'5}

>>> a.clear()

>>> a

{}

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


1

2

3

4

5

>>> del a

>>> a

Traceback (most recent call last):

  File "<stdin>", line 1in <module>

NameError: name 'a' is not defined


11.copy()函数

·功能:对字典进行浅复制;

·Python中普通情况下的“复制”:


1

2

3

4

5

6

7

8

9

10

11

12

13

>>> xpleaf

{'name''xpleaf''weight''55kg''wife': None, 'hobby''IT''dream''excellent hacker''occupation''student'}

>>> xpleaf_copy = xpleaf

>>> xpleaf_copy

{'name''xpleaf''weight''55kg''wife': None, 'hobby''IT''dream''excellent hacker''occupation''student'}

>>> xpleaf['hobby'] = 'IT_Field'

>>> xpleaf_copy

{'name''xpleaf''weight''55kg''wife': None, 'hobby''IT_Field''dream''excellent hacker''occupation''student'}

>>> xpleaf_copy['wife'] = 'None!!!'

>>> xpleaf_copy

{'name''xpleaf''weight''55kg''wife''None!!!''hobby''IT_Field''dream''excellent hacker''occupation''student'}

>>> xpleaf

{'name''xpleaf''weight''55kg''wife''None!!!''hobby''IT_Field''dream''excellent hacker''occupation''student'}

·即将变量赋给其它变量只是将对象(实际的字典)作一个引用传递而已,修改任何一个引用都会改变原来对象的值;

·copy()的浅复制功能则不是引用传递:


1

2

3

4

5

6

7

8

>>> xpleaf_copy2 = xpleaf.copy()

>>> xpleaf_copy2

{'name''xpleaf''weight''55kg''wife''None!!!''hobby''IT_Field''dream''excellent hacker''occupation''student'}

>>> xpleaf_copy2['wife'] = 'CL'

>>> xpleaf_copy2

{'name''xpleaf''weight''55kg''wife''CL''hobby''IT_Field''dream''excellent hacker''occupation''student'}

>>> xpleaf

{'name''xpleaf''weight''55kg''wife''None!!!''hobby''IT_Field''dream''excellent hacker''occupation''student'}

·当然copy()更重要的作用不仅在于此,这里只是简单提及它的作用。

时间: 2025-01-07 07:03:11

【Python之旅】第二篇(四):字典的相关文章

【Python之旅】第四篇(二):Python异常处理与异常捕捉

 在Python程序的执行过程中,难免会出现异常的情况,如果做的是跟用户交互的程序,当用户输入不可接受的内容时,在可预见的范围内,我们当然是希望可以给用户一些提示,而不是原来Python内置异常中的那些提示语句,毕竟那些语句只适合给程序员做调试参考,对用户并没有多大的价值.因此这就需要了解Python的常见异常了.     当然,我们也可以制作自己的异常,当用户输入满足或不满足我们的需求时,就可以触发这些异常,以使我们写的程序更加人性化. 1.Python常见异常与演示     Python常见

【Python之旅】第四篇(一):Python装饰器

有时候拿到一个程序接口,需要对其进行扩展,但是又不能修改原来接口的源代码,这时候就需要使用装饰器了.     有下面一个小程序,假如是别人提供给我们的调用接口: 1 2 3 4 5 import time   def sayHi():         time.sleep(1)         print 'Hello, I am xpleaf.'     一般情况下,如果想要计算该程序的执行时间(因为有可能要对该接口进行某些性能上的测试),就需要把以上接口修改为下面这样,同时执行一下: 1 2

【Python之旅】第四篇(三):Python面向对象编程详解

终于是来到了Python的面向对象编程,以前是没有接触过其它的面向对象编程的语言,因此学习这一部分是相当带劲的,这里也总结一下. 1.面向对象编程的相关名词及解释     世界万物,皆可分类,一切皆为对象.     所谓的面向对象编程,指的是一种编程的思想,通过对具体代码实现过程(面向过程编程)的不断抽象,以形成一个个的类别,以提高我们进行大型程序编写的效率(面向对象的具体实现需要面向过程,大型程序也可以用面向过程来编写,只是比较麻烦).对于面向对象编程的相关名词和解释如下: 对象 :类的实体\

【Python之旅】第四篇(四):基于面向对象的模拟人生游戏类

 需要用面向对象的思想编写一个模拟人生的小游戏,其实就目前学的知识来说,最多只能写个故事叙述类的小游戏,因此这里只是给出该游戏中有关class的代码,代码是Alex老师写的,对进一步加深Python面向对象的特性有很大帮助!     游戏的情节梗概如下: John and Liz 是高中同学时的恋人,后来Liz考上了北京城市学院,Jhon没有,为了跟女朋友在一起,他来到了北京打工(一家网吧当网管),挣钱为Liz交学费,后来LIZ毕业后工作了,遇到了公司的高富帅peter,然后两人就苟且在了一起,

「C语言回顾之旅」第二篇:指针详解进阶

说明:     第一篇回顾了指针的基本概念以及基本使用,因此对指针也有了一个较为清晰的思路,但实际上第一篇关于指针的内容是不太容易忘记的.这是第二篇中的内容是比较容易混淆,但对于指针的进一步学习也是非常重要的. 一.指向函数的指针 1.函数指针 ·函数指针即指向函数的指针,函数指针值为函数的入口地址,通过使用该指针,即可以使用该函数: ·编写一个程序返回两个数的最大值,通过函数指针调用函数: a.main函数代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Python中使用items()方法返回字典元素对的教程

  这篇文章主要介绍了Python中使用items()方法返回字典元素对的教程,是Python入门中的基础知识,需要的朋友可以参考下 items()方法返回字典的(键,值)元组对的列表 语法 以下是items()方法的语法: ? 1 dict.items() 参数 NA 返回值 此方法返回元组对的列表. 例子 下面的例子显示了items()方法的使用. ? 1 2 3 4 5 #!/usr/bin/python   dict = {'Name': 'Zara', 'Age': 7}   prin

Henry的VB.NET之旅(十四)—动态关联事件与处理程序

程序|动态 Henry的VB.NET之旅(十四)-动态关联事件与处理程序 韩睿 "要解释新的事件处理程序的方法,我们需要先说几个重要的问题."大李开始严肃起来,我也只得挪动一下身子,表现出正襟危坐的架势. "我们首先讨论一下事件是怎么产生的.事件是对象发送的消息,以发信号通知操作的发生.操作可能是由用户交互,例如鼠标单击引起的,也可能是由某些其他的程序逻辑触发的.引发事件的对象叫做事件发送方(啊,听到这,Henry突然明白了事件处理程序中的第一个参量为什么叫Sender了,就

JavaWeb开发入门第二篇Tomcat服务器配置讲解_java

一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml配置文件中的Connector节点进行的端口修改 例如:将Tomcat服务器的启动端口由默认的8080改成8081端口 Tomcat服务器启动端口默认配置 <Connector port="8080" protocol="HTTP/1.1" connectionT

Android开源项目第二篇——工具库篇

Android开源项目第二篇--工具库篇 本文为那些不错的Android开源项目第二篇--开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他.   最新内容请访问AndroidOpenProject@Github,欢迎Star和Fork.   Android开源项目系列汇总已完成,包括: Android开源项目第一篇--个性化控件(View)篇Android开源项目第二篇--工具库

Sql Server之旅——第十四站 深入的探讨锁机制

原文:Sql Server之旅--第十四站 深入的探讨锁机制 上一篇我只是做了一个堆表让大家初步的认识到锁的痉挛状态,但是在现实世界上并没有这么简单的事情,起码我的表不会没有索引对吧,,,还 有就是我的表一定会有很多的连接过来,10:1的读写,很多码农可能都会遇到类似神乎其神的死锁,卡住,读不出来,插不进入等等神仙的事情导致性 能低下,这篇我们一起来探讨下.   一: 当select遇到性能低下的update会怎么样? 1. 还是使用原始的person表,插入6条数据,由于是4000字节,所以两