序列是一个按照一定顺序将值进行组织的数据结构形式,可以通过索引对其进行征引。另外还有一种数据结构是通过名字来引用值,这种数据结构成为映射(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(字典)的更多相关文章
-
python学习笔记整理——字典
python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...
-
Python学习笔记之字典
一.创建和使用字典 1.创建字典 phonebook={'Alice':'2341','Beth':'9102','Cecil':'3258'} 2.dict,通过映射创建字典 >>> ...
-
【Python学习笔记】字典操作
字典dict是Python中唯一内置的映射类型,由键值对组成,字典是无序的.字典的键必须是不变对象,如字符串.数字.元组等,而包含可变对象的列表.字典和元组则不能作为键.这里可变和不可变的意思是指这个 ...
-
Python学习笔记四--字典与集合
字典是Python中唯一的映射类型.所谓映射即指该数据类型包含哈希值(key)和与之对应的值(value)的序列.字典是可变类型.字典中的数据是无序排列的. 4.1.1字典的创建及赋值 dict1={ ...
-
python学习笔记八——字典的方法
4.3.3 字典的方法 字典的常用方法可以极大地提高编程效率.keys()和values()分别返回字典的key列表和value列表.例: dict={"a":"appl ...
-
python学习笔记七——字典
4.3 字典结构 字典是Python中重要的数据类型,字典的由“键-值”对组成的集合,字典中的“值”通过“键”来引用. 4.3.1 字典的创建 字典由一系列的“键-值”(key-value)对组成,“ ...
-
python学习笔记(字典乱码)
博主总结下 python中字典中包含中文时,使用过程中出现乱码 json.dumps(params, encoding="UTF-8", ensure_ascii=False) p ...
-
python学习笔记(6)——字典(Dictionary)
dict= {key1 : value1, key2 : value2 ...} 关键词:字典中元素成对出现- key:value 格式- 两端{ } ,键:值,每对键值间用 ,隔开. 键key-唯一 ...
-
python学习笔记(三)---字典
字典 在Python中,字典 字典 是一系列键 键-值对 值对 .每个键 键 都与一个值相关联,你可以使用键来访问与之相关联的值.与键相关联的值可以是数字.字符串.列表乃至字典.事实上,可将 任何Py ...
随机推荐
-
[Java 基础]数组
数组初始化 定义数组语法格式 定义数组有两种方式,如下两种格式是等价的: int[] a1; int a1[]; 注:在C/C++中,不支持第一种格式.但是,推荐使用这种方式,因为这样似乎更合理,声 ...
-
命令行启动win7系统操作部分功能
control.exe /name microsoft.folderoptions 启动资源管理器的 文件夹属性 选项卡 control.exe /name Microsoft.AddHardware ...
-
Javax.mail.NoSuchProviderException: smtp
UT 这个错误是因为缺jar包 下载地址:在oralce下载一个 JavaMail 包 http://www.oracle.com/technetwork/java/javamail/index-13 ...
-
进程管理利器supervisor
supervisor安装 方法一 1:用管理员安装python-setuptools suse zypper in python-setuptools centos yum install pytho ...
-
webpack3新特性介绍
6月20号webpack推出了3.0版本,官方也发布了公告.根据公告介绍,webpack团队将未来版本的改动聚焦在社区提出的功能需求,同时将保持一个快速.稳定的发布节奏.本文主要依据公告内容,简单介绍 ...
-
SPFA 算法详解
适用范围:给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便 派上用场了. 我们约定有向加权图G不存在负权回路,即最短路径 ...
-
Cable master
Problem Description Inhabitants of the Wonderland have decided to hold a regional programming contes ...
-
Android远程桌面助手之功能简介
外国友人录制的ARDC的使用简介,非常不错,介绍得很详尽.
-
BZOJ 2728: [HNOI2012]与非(位运算)
题意 定义 NAND(与非)运算,其运算结果为真当且仅当两个输入的布尔值不全为真,也就是 A NAND B = NOT(A AND B) ,运算位数不会超过 \(k\) 位, 给你 \(n\) 个整数 ...
- 对JVM的简单了解