字典

1. 基本概念

字典与java中的map类似,是一个无序的映射结构,由一个个键-值(key-value)对组成。字典的键是访问其元素的索引,不能重复。在字典里,一般使用字符串或整型数字作为键,(或者说任何一个含有__hash__()和__eq__()方法的对象。)字典中的值可以是任何类型的对象。

2. 创建字典

方式一:直接创建

person = {'name':'Amanda','age':12,'sex':'female','addr':'NewYork'}

说明:

字典用花括号{}括起来,每一对元素通过“键:值”的形式表达,不同的对之间用逗号分隔。

方式二:dict()函数创建

>>> items = [('Alice','02391'),('Bob','0283'),('Jimmy','2883')]
>>> dict(items)
{'Bob': '0283', 'Jimmy': '2883', 'Alice': '02391'}

dict()函数接收一个映射或者(键、值)序列创建字典。

3. 字典的基本操作

3.1访问字典元素

用法:dict[key],返回字典中key对应的value值。当key不存在时会引发KeyError异常。如:

>>> dt = {'Bob': '0283', 'Jimmy': '2883', 'Alice': '02391'}
>>> dt['Bob']
'0283'
>>> dt['bb']
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
dt['bb']
KeyError: 'bb'

3.2 给字典添加元素

用法:dict[key]=value。当key不存在时,会新建一个元素添加到字典里。如:

>>> dt = {1:'Apple',2:'Sumsung',3:'xiaomi'}

>>> dt[4] = 'htc'

>>> dt

{1: 'Apple', 2: 'Sumsung', 3: 'xiaomi', 4: 'htc'}

3.3 修改字典元素值

用法:dict[key]=value。修改字典中已存在的key对应的value值。

>>> dt = {1:'Apple',2:'Sumsung',3:'xiaomi'}

>>> dt[3]= 'htc'

>>> dt

{1: 'Apple', 2: 'Sumsung', 3: 'htc'}

3.4 删除字典元素

用法:del dict[key]。删除字典中指定key和其对应的value值。若键key不存在,会引发keyError异常。如

>>> dt = {1:'Apple',2:'Sumsung',3:'xiaomi'}

>>> del dt[3]

>>> dt

{1: 'Apple', 2: 'Sumsung'}

>>> del dt['1']

Traceback (most recent call last):

File "<pyshell#24>", line 1, in <module>

del dt['1']

KeyError: '1'

3.5 获取字典键值对的数量

用法:len(dict).如:

>>> dt = {'Bob': '0283', 'Jimmy': '2883', 'Alice': '02391'}

>>> len(dt)

3

3.6 检查字典中是否存在某key

用法:key in dict.检查字典dict中是否含有键为key的项,返回值为布尔型。如:

>>> dt = {'Bob': '0283', 'Jimmy': '2883', 'Alice': '02391'}

>>> 'Alice' in dt

True

>>> 'Ashly' in dt

False

4.字典的格式化字符串

我们可以对一个对象进行格式化,也可以把多个对象放到元组里进行格式化。如:

>>> "What's wrong with you,%s" % 'Lily'

"What's wrong with you,Lily"

>>> "Can you caculate this statement, %d +%d?" % (12,108)

'Can you caculate this statement, 12 +108?'

现在我们也可以对一个字典进行格式化,需要在%后添加“(Key)”,被格式化的对象换成字典。如:

>>> dt = {'Bob': '0283', 'Jimmy': '2883', 'Alice': '02391'}

>>> "Alice number is %(Alice)s" % dt

'Alice number is 02391'

格式化时,通过给出的key从字典中获取其对应的value值作为被格式化的对象。若key不存在则会出错。我们可以一次格式化字典中的多个对象。下面看一个例子。

temple = '''<html>

<head><title>%(title)s</title></head>

<body>

<h1>%(title)s</h1>

<p>%(text)s</p>

</body>

<html>'''

data = {'title':'Home Page','text':'welcome to my home page'}

print temple % data

程序运行结果是:

5. 字典的常用方法

下面介绍总结一些字典中常用的方法。

5.1 获取字典对应键的值get()/setdefault()

get()

用法:dict.get(key[,newValue])。返回字典中键为key的值,与dict[key]类似。不同的是,若键不存在,默认返回None,而不会抛出异常,也可以指定返回值。

>>> d = {'title':'welcome','context':'welcome to my homepage','writer':'Alice'}

>>> d.get('title')

'welcome'

>>> rs = d.get('name')

>>> print rs

None

>>> rs = d.get('name','Jhon')

>>> rs

'Jhon'

setdefault()

与get()相似,返回指定键的值。不同的是,当键不存在时,setdefault()方法会创建一个新建,对应的值默认是None,也可以设定,并返回新建对应的值。如:

>>> dt = {1:'bee',2:'fly',3:'paguin'}

#键存在

>>> dt.setdefault(1,'animal')

'bee'

>>> dt

{1: 'bee', 2: 'fly', 3: 'paguin'}

#键不存在

>>> dt.setdefault(4,'animal')

'animal'

>>> dt

{1: 'bee', 2: 'fly', 3: 'paguin', 4: 'animal'}

5.2 检查字典中是否含有某键has_key()

用法:dict.has_key(key), 相当于 key in dict.如:

>>> d = {'title':'welcome','context':'welcome to my homepage','writer':'Alice'}

>>> d.has_key('title')

True

>>> 'title' in d

True

5.3 获取字典所有的键keys()/iterkeys()

dict.keys()获取字典所有的键,返回一个列表。而dict.iterkeys()返回的是键的迭代器。需要进行迭代时才能获取到真正的键。如

>>> dt = {'Bob': '0283', 'Jimmy': '2883', 'Alice': '02391'}

>>> dt.keys()

['Bob', 'Jimmy', 'Alice']

>>> it = dt.iterkeys()

#it为迭代器对象,iterator

>>> it

<dictionary-keyiterator object at 0x0134A1E0>

>>> list(it)

['Bob', 'Jimmy', 'Alice']

5.4 获取字典所有的值values()/itervalues()

与keys()/iterkeys()相似,values()/itervalues()分别返回字典的所有值的列表和其迭代器。值可以重复。如:

>>> dt = {1:'bee',2:'fly',3:'paguin',4:'fly'}

>>> dt.values()

['bee', 'fly', 'paguin', 'fly']

>>> it = dt.itervalues()

>>> list(it)

['bee', 'fly', 'paguin', 'fly']

5.5 获取字典所有的项items()/iteritems()

dict.items()以列表的形式返回字典所有的项,每一项作为一个元组。Dict.tieritems()返回的是字典所有项的一个迭代器。如

>>> dt = {'Bob': '0283', 'Jimmy': '2883', 'Alice': '02391'}

>>> dt.items()

[('Bob', '0283'), ('Jimmy', '2883'), ('Alice', '02391')]

>>> it = dt.iteritems()

#it为迭代器对象,iterator

>>> it

<dictionary-itemiterator object at 0x0130DDB0>

>>> list(it)

[('Bob', '0283'), ('Jimmy', '2883'), ('Alice', '02391')]

5.6 给字典添加项update()

用法:dict.update(obj), obj可以是一个字典,也可以是键值对。若与字典中原有的键重复,就覆盖原值。如:

>>> dt = {1:'bee',2:'fly',3:'paguin'}

>>> more = {4:'red',1:'blue'}

#字典

>>> dt.update(more)

>>> dt

{1: 'blue', 2: 'fly', 3: 'paguin', 4: 'red'}

>>> more

{1: 'blue', 4: 'red'}

#键值对

>>> dt.update([(5,'cat'),(6,'dog')])

>>> dt

{1: 'blue', 2: 'fly', 3: 'paguin', 4: 'red', 5: 'cat', 6: 'dog'}

5.7 删除字典的项pop()/popitem()

用法:dict.pop(key).删除字典指定key的项,返回key对应的值。Key不存在时引发异常。dict.popitem()随机删除字典的一项,并返回该项。如:

>>> dt = {1:'bee',2:'fly',3:'paguin',4:'beat'}

>>> dt.pop(1)

'bee'

>>> dt

{2: 'fly', 3: 'paguin', 4: 'beat'}

#键不存在

>>> dt.pop('1')

Traceback (most recent call last):

File "<pyshell#27>", line 1, in <module>

dt.pop('1')

KeyError: '1'

>>> dt.popitem()

(2, 'fly')

>>> dt

{3: 'paguin', 4: 'beat'}

5.8 清空字典clear()

清空字典所有的项,这是一个原地操作,无返回值。如

>>> dt = {1:'bee',2:'fly',3:'paguin'}

>>> dtcpy = dt

>>> dt.clear()

>>> dt

{}

>>> dtcpy

{}

5.9 复制字典copy()

用法:dict.copy(),返回具有相同元素的字典。

>>> srcDict = {'userName':'Jhon','sex':'male','tel':['0231','1241','2619']}

>>> cpyDict = srcDict.copy()

>>> cpyDict['userName'] = 'Jimy'

>>> cpyDict

{'userName': 'Jimy', 'tel': ['0231', '1241', '2619'], 'sex': 'male'}

>>> srcDict

{'userName': 'Jhon', 'tel': ['0231', '1241', '2619'], 'sex': 'male'}

>>> cpyDict['tel'].remove('0231')

>>> cpyDict

{'userName': 'Jimy', 'tel': ['1241', '2619'], 'sex': 'male'}

>>> srcDict

{'userName': 'Jhon', 'tel': ['1241', '2619'], 'sex': 'male'}

可以看到copy()是一种浅拷贝,不是获得字典的副本。因此若通过新变量对字典进行值替换,不会改变原字典的内容。但若修改了字典中的值,原字典也会被改变。

为了避免这种情况,我们可以使用copy模块的deepcopy()函数,它是一种深拷贝,复制原字典中包含的所有元素返回一个新对象给新变量。因此通过新变量修改字典不会影响到原来的字典。如:

>>> from copy import deepcopy

>>> srcDict = {'userName':'Jhon','sex':'male','tel':['0231','1241','2619']}>>> deepDict = deepcopy(srcDict)

>>> deepDict = deepcopy(srcDict)

>>> deepDict['tel'].remove('0231')

>>> deepDict

{'userName': 'Jhon', 'tel': ['1241', '2619'], 'sex': 'male'}

>>> srcDict

{'userName': 'Jhon', 'tel': ['0231', '1241', '2619'], 'sex': 'male'}

python学习总结--字典相关推荐

  1. Python学习.第六天.字典

    Python学习.第六天.字典 前言 一.什么是字典? 二.字典的原理 三.字典的创建与删除 四.字典的查询操作 五.字典元素的增.删.改操作 1.key的判断: 2.字典元素的删除 3.字典元素的新 ...

  2. SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理

    SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理 本文连接 简介 SIGIA_4P 网址 a. 课程OKR Objectives and ...

  3. Python学习:字典(dictionary)

    Python学习:字典(dictionary) 异常处理小技巧 异常 ​ 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行.一般情况下,在Python无法正常处理程序时就会发生一个 ...

  4. python学习(字典、用户输入和while循环)

    前言:上次学习到了if语句,这次接着进行学习. 字典 字典能够准确地为各种真实物体建模,且能够将相关信息关联起来. 使用字典 字典是一系列的键--值对,一个建对应一个值,值可以为数字.字符串等 在Py ...

  5. Python学习(五)字典

    字典 1.一个简单的字典 现在想存储一个人的基本信息,比如姓名,年龄等信息,应该怎样存储呢?下面是一个简单的字典,存储了一个人的相关信息. people_0 = {"name": ...

  6. Python学习6 字典基础知识和常用函数

    字典概念 字典是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据.为了保存具有映射关系的数据,Python 提供了字典,字典相当于保存了两组数据,其中一组数据是关键数据,被称为 ...

  7. python学习—伍—字典

    目录 零.字典基础 简单字典举例 字典是什么 访问字典中的值 添加键值对 创建空字典 修改字典中的值 删除键值对 由类似对象组成的字典 使用 get() 来访问值 壹.遍历字典 遍历所有键值对 遍历字 ...

  8. python学习04——字典

    文章目录 1. 字典的创建 2. 字典的元素查找 2.1 使用`[]` 2.2 使用`get()`函数 3. 字典的增删改操作 3.1 判断元素 3.2 增加元素 3.3 删除元素 3.3.1 删除某 ...

  9. Python 学习笔记 - 字典

    1.使用字典 字典 是一系列键-值对. * 每个键都与一个值相关联,你可以使用键来访问与之相关联的值. * 与键相关联的值可以是数字.字符串.列表乃至字典. * 事实上,可将任何Python对象用做字 ...

  10. Python学习之字典

    #字典 ''' 语法: 字典名 = {'键':'值','键':'值',....} 例如:test = {'color':'pink','points':7} print(test['color']) ...

最新文章

  1. Exchange 2016证书配置
  2. 【数据竞赛】长文本竞赛上分的三种策略。
  3. linux无盘windows系统,Linux无盘启动Win2000终端
  4. 微盟数据库的涅槃之旅
  5. 中英文字体名字对应表
  6. Linux常用的25条命令
  7. AI产品经理必修课:机器学习算法
  8. 汇编语言常见错误(转载)
  9. yml文件tab 空格_YAML 文件介绍
  10. [HDU3756]Dome of Circus
  11. 服务器装系统蓝屏怎么办,重装系统蓝屏怎么办
  12. 数字电视 机顶盒原理
  13. 愉快的在vscode上刷leetcode
  14. DBMS (数据库管理系统) 是什么
  15. PYTHON 之 多线程 and 多进程
  16. win7的音量图标不见了
  17. 遥感影像语义分割论文笔记(一)FarSeg CVPR2020
  18. 2.12 二项式系数加法解 C实现
  19. 福大携手移动云,共启数字教育新篇章!
  20. HTML小游戏11 —— 横版恐龙大冒险游戏(附完整源码)

热门文章

  1. 基于颜色布局描述符(CLD)图像特征提取算法使用Python实现简单的人脸检测功能并使用PyQt5构建简单的功能界面(数字图像处理课程实验)
  2. xsd、tdt文件说明
  3. Orange API 网关部署安装总结
  4. 【Pytorch】torch.nn.LeakyReLU()
  5. 执行应用程序或者加载动态库时出现: No such file or directory
  6. Corda DemoBench for V1.0
  7. STP——BPDU格式及字段说明
  8. 坦克大战JAVA版(全码)
  9. 在word文件中怎么调整行间距
  10. 分布式事务七种解决方案,最后一种经典了!