序列是一个按照一定顺序将值进行组织的数据结构形式,可以通过索引对其进行征引。另外还有一种数据结构是通过名字来引用值,这种数据结构成为映射(mapping)。字典是Python位移内建的映射。字典中的值并没有特殊的顺序,但是都储存在特定的键下。键可以是数字,字符串或者是元组。

创建字典

字典由多个键及对应的值构成了键-值组合(键-值对成为项)。每个键和值之间用冒号隔开,各项之间用逗号。字典用大括号。映射中,键是唯一的,但是不同的键可以对应相同的值。

>>> phonebook={'Alice':'0123','Smith':'1234','Mum':'1597','Dad':'1319'}
>>> phonebook['Mum']
'1597'

dict函数

dict函数可以利用其它映射或者(键,值)对来创建字典。dict也可以通过关键字参数来创建字典。另外还可以以映射作为参数,以创建项与映射相同的字典。

>>> items=[('name','Gumby'),('age',42)]
>>> d=dict(items)
>>> d
{'name': 'Gumby', 'age': 42}
>>> d['name']
'Gumby'

>>> d=dict(name='Gumy',age=42)
>>> d
{'name': 'Gumy', 'age': 42}

#### 字典的基本操作

字典的很多操作与序列相似:

  • Len(d)返回d中项的数量
  • d[k]返回关联到键k上的值
  • d[k]=v将值v关联到k键上
  • del d[k]删除键为k的项
  • k in d检查d中是否含有键为k的项。

尽管字典和序列有很多相似的地方,但是还是有一些重要的不同:

  • 键类型。键并不一定是整型数据,可以是任意的不可变类型,比如浮点型、字符串、元组等。
  • 自动添加。即使键起初不在字典中,也可以为他赋值,这是会自动创建新的项。
  • 成员资格。表达式k in d查找的是键而不是值。
  • 嵌套表达。字典的项(值是另一个字典)可以是另一个字典。
# 做一个简单的数据库
# 字典使用任命作为键。每个人用另一个字典来表示,其键为'phone'和'addr'分别表示他们的电话号码和地址
people = {
    'Alice':{'phone':'2341','addr':'Foo drive 23'},
    'Beth':{'phone':'1122','addr':'Bar street 22'},
    'Smith':{'phone':'2342','addr':'Foo drive 21'},
    'Mum':{'phone':'1000','addr':'Foo drive 20'},
    'Cecil':{'phone':'3241','addr':'Foo drive 19'},
    'Gumy':{'phone':'4231','addr':'Foo drive 35'},
}
# 针对电话号码和地址使用的描述性标签,会在打印输出的时候用到
labels ={'phone':'phone number','addr':'address'}
name=raw_input('Name: ')
# 查找电话号码还是地址?
request = raw_input('Phone number (p) or address (a)?')
# 使用正确的键
if request=='p':key='phone'
if request=='a':key='addr'
# 如果名字是字典中有效的键才打印信息
if name in people:input("%s's %s is %s.")%(name,labels[key],people[name][key])

字典的格式化字符串

在每个转换说明符中的%字符后面,可以加上键(用圆括号括起来),后面再跟上其他说明元素。当以这种方式使用字典时,只要所给的键在字典中可以找到,就可以使用任意数量的转换说明符。

template = '''<html>
<head><title>%(title)s</title></head>
<body>
<h1>%(title)s</h1>
<p>%(text)s</p>
</body>'''
data ={'title':'My Home Page','text':'Welcome to my home page!'}
print(template%data)

字典方法

就像其他的内建类型一样,字典也有方法。

clear

clear用来清除字典中的所有项。这是一个原地操作,所以没有返回值。

>>> d={}
>>> d['anme']='Gumy'
>>> d['age']='42'
>>> d
{'anme': 'Gumy', 'age': '42'}
>>> returned_value=d.clear()
>>> d
{}
>>> print(returned_value)
None
copy

copy方法返回一个具有相同键-值对应的新字典。(这个方法成为前复制shallow copy,因为值本身就是相同的,而不是副本。)当在副本中替换值得时候,原字典不受影响,但是如果修改了某个值,则原字典的值也会相应的被修改。在copy模块中还有一个方法deepcopy称为深复制。复制其包含的所有值。

>>> x={'username':'lihua','people':['foo','haha','nihao']}
>>> y=x.copy()
>>> y['username']='mlh'
>>> y['machines'].remove('haha')
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    y['machines'].remove('haha')
KeyError: 'machines'
>>> y['people'].remove('haha')
>>> y
{'people': ['foo', 'nihao'], 'username': 'mlh'}
>>> x
{'people': ['foo', 'nihao'], 'username': 'lihua'}
>>> from copy import deepcopy
>>> d={}
>>> d['names']=['Alfred','Bertrand']
>>> c=d.copy()
>>> dc=deepcopy(d)
>>> d['names'].append('Clive')
>>> c
{'names': ['Alfred', 'Bertrand', 'Clive']}
>>> dc
{'names': ['Alfred', 'Bertrand']}
fromkeys

fromekeys方法使用给定的键建立新的字典,每个键都对应一个默认的值None。如果不想使用none作为默认值,可以自己提供默认值。

Python学习笔记3(字典)的更多相关文章

  1. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  2. Python学习笔记之字典

    一.创建和使用字典 1.创建字典 phonebook={'Alice':'2341','Beth':'9102','Cecil':'3258'} 2.dict,通过映射创建字典 >>> ...

  3. 【Python学习笔记】字典操作

    字典dict是Python中唯一内置的映射类型,由键值对组成,字典是无序的.字典的键必须是不变对象,如字符串.数字.元组等,而包含可变对象的列表.字典和元组则不能作为键.这里可变和不可变的意思是指这个 ...

  4. Python学习笔记四--字典与集合

    字典是Python中唯一的映射类型.所谓映射即指该数据类型包含哈希值(key)和与之对应的值(value)的序列.字典是可变类型.字典中的数据是无序排列的. 4.1.1字典的创建及赋值 dict1={ ...

  5. python学习笔记八——字典的方法

    4.3.3 字典的方法 字典的常用方法可以极大地提高编程效率.keys()和values()分别返回字典的key列表和value列表.例: dict={"a":"appl ...

  6. python学习笔记七——字典

    4.3 字典结构 字典是Python中重要的数据类型,字典的由“键-值”对组成的集合,字典中的“值”通过“键”来引用. 4.3.1 字典的创建 字典由一系列的“键-值”(key-value)对组成,“ ...

  7. python学习笔记(字典乱码)

    博主总结下 python中字典中包含中文时,使用过程中出现乱码 json.dumps(params, encoding="UTF-8", ensure_ascii=False) p ...

  8. python学习笔记(6)——字典(Dictionary)

    dict= {key1 : value1, key2 : value2 ...} 关键词:字典中元素成对出现- key:value 格式- 两端{ } ,键:值,每对键值间用 ,隔开. 键key-唯一 ...

  9. python学习笔记(三)---字典

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

随机推荐

  1. Elasticsearch学习记录(分布式的特性)

    Elasticsearch学习记录(分布式的特性) 分布式的特性 我们提到Elasticsearch可以扩展到上百(甚至上千)的服务器来处理PB级的数据.然而我们的例子只给出了一些使用Elastics ...

  2. Windows下打开某些软件时显示显卡驱动不是最新的问题

    在Windows下打开某些对显卡要求比较高的软件时,会出现某些显卡驱动不是最新,要求更新到最新的提示,但是当你真的去更新显卡驱动的时候,却发现现在的显卡驱动已经是最新了,那么为什么还会有这样的提示呢, ...

  3. 判断EditText输入的字符串中是否包含有emoji表情

    我们在实际的开发中经常需要用到EditText 但是有一个不好的地方就是我们在前端用EditText输入了带有emoji表情的字符串之后 服务器是无法识别的,这就需要我们前端根据需求来决定表情的去留, ...

  4. Panoramic Photography

    http://codeforces.com/gym/101149/problem/J 给出n个数字,表示第i条街有a[i]个照片存在过,其中,每个照片可以覆盖一段连续的区间, 就是一张照片可以覆盖[2 ...

  5. 原生ajax提交php后台接收不到问题

    var xmlHttp; if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); ...

  6. 简单的鼠标经过特效-mouse事件

    <!doctype html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...

  7. na 残

    题目描述: 对于斐波那锲数列f(0)=0,f(1)=1,....求f(f(n)的值 0<=n<=10^100 给出T组数据,每行一个n 输出n行 f(f(n)) 样例输入: 4 0 1 2 ...

  8. ios自定义日期、时间、城市选择器

    选择器,我想大家都不陌生,当需要用户去选择某些范围值内的一个固定值时,我们会采用选择器的方式.选择器可以直观的提示用户选择的值范围.统一信息的填写格式,同时也方便用户快速的进行选择,比如对于性别,正常 ...

  9. [翻译] API测试的最佳实践 - 介绍

    API测试的最佳实践 - 介绍 在上一篇“是什么让API测试很叼”一文中,我们讨论API与其他形式的软件测试的差异.部分是因为API之间的通信压根就没考虑让你能读懂,纯粹是为了方便计算机之间的交互而设 ...

  10. windows下Mongodb和Memcached安装笔记

    MongoDB安装: D:\ProgramFiles\MongoDBServer3.2\bin\mongod --dbpath D:\mongoData D:\ProgramFiles\MongoDB ...