序列是一个按照一定顺序将值进行组织的数据结构形式,可以通过索引对其进行征引。另外还有一种数据结构是通过名字来引用值,这种数据结构成为映射(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. PV(Pageviews)、访问(Visits)和访问者(Visitors)的区别

    1. 在GA上,每个页面每次加载将被记为一次PV.举例来说,一次用户访问页面顺序为:页面A->页面B->页面A,然后离开了你的站点,那这次用户访问(Visits)的PV总计为3次.   2 ...

  2. java 对象占用内存

    String 方法用于文本分析及大量字符串处理时会对内存性能造成一些影响.可能导致内存占用太大甚至OOM. 一.先介绍一下String对象的内存占用 一般而言,Java 对象在虚拟机的结构如下:•对象 ...

  3. iOS蓝牙传输数据演示-3

    蓝牙传输数据演示 在上一小节中,我们一起开发了基于蓝牙通讯的工具类,该类中详细的实现蓝牙连接流程中的每一个环节 本小节我们就以给小米手环发送数据使其震动来演示我们工具类的用法 工具类本身具有通用性,属 ...

  4. redis集群模式

    1 弊端和优势 弊端:相比单机模式,集群模式会在节点之间同步数据,会降低20%-30%的性能,同时增加架构复杂性,提高硬件成本和学习成本. 优势:增加冗余,避免单点故障.单机模式如果要重启,必然会丢失 ...

  5. sql server之exists用法

  6. 洛谷 P2662 牛场围栏

    做法是这样的: 首先暴力把所有可能的边长搞出来..(当然<=0的不要) 排序边长+去重, 当且仅当可行边长里面有1时,任何长度都能取到,输出-1 当且仅当所有可行边长的gcd大于1时,不能取到的 ...

  7. 洛谷 P1042 乒乓球

    P1042 乒乓球 var s:string; a1:array[1..50000] of char; i,n,x,y:longint; procedure f1; begin while not e ...

  8. python入门之递归

    表现形式: 函数体里包含执行本身 def f1(): r = f1() f1() 实例: 斐波那契数 (a1+a2=a3   a2+a3=a4   a3+a4=a5   ......) def f1( ...

  9. [已读]ppk谈javascript

    读的第一本javascript方面的书籍,印象也比较深.ppk对浏览器兼容很有研究~~可以看看他的www.quirksmode.org

  10. ecshop文章分类页面调用文章的内容

    有的时候需要用到,所以总结了一下. 打开includes/lib_article.php文件 红色部分为添加的部分 function get_cat_articles($cat_id, $page = ...