序列是一个按照一定顺序将值进行组织的数据结构形式,可以通过索引对其进行征引。另外还有一种数据结构是通过名字来引用值,这种数据结构成为映射(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. 洛谷P1919 【模板】A*B Problem升级版(FFT)

    传送门 话说FFT该不会真的只能用来做这种板子吧…… 我们把两个数字的每一位都看作多项式的系数 然后这就是一个多项式乘法 上FFT就好了 然后去掉前导零 (然而连FFT的板子都背不来orz,而且空间又 ...

  2. 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:1. 连接阿里云物联网

    文档目录: 说明 1. 连接阿里云物联网 2. IoT 客户端 3. 订阅Topic与响应Topic 4. 设备上报属性 4.1 上报位置信息 5. 设置设备属性 6. 设备事件上报 7. 服务调用 ...

  3. ubuntu 14.04 源码编译mysql-5.7.17

    环境为 Ubuntu 12.04 64 位的桌面版 编译的mysql 版本为 5.7.18 首先需要安装一下依赖包 sudo apt-get install libncurses5-dev cmake ...

  4. PJzhang:国内常用威胁情报搜索引擎说明

    猫宁!!! 参考链接: https://www.freebuf.com/column/136763.html https://www.freebuf.com/sectool/163946.html 如 ...

  5. AttributedString 图片间距问题

    1.NSMutableAttributedString如何显示图片 NSMutableAttributedString *vipStr = [[NSMutableAttributedString al ...

  6. Linux 软连接和硬连接(转)

    1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接]硬连接指通过索引节点 ...

  7. react native设置容器阴影

    shadowColor:'#eee',shadowOffset:{h:10,w:10},shadowRadius:3,shadowOpacity:0.8,

  8. 集合:set

    set 就是数学上的集合——每个元素最多只出现一次.和sort一样,自定义一个类型也可以构造set ,但是必须定义“小于”运算符. 例子: 输入一个文本,找出所有不同的单词(连续的字母序列),按字典从 ...

  9. log日志中不打印异常栈的具体信息

    问题与分析 最近在查项目的log时发现报了大量的NPE(NullPointerException),诡异的是只log了Exception的类名,却没有具体的堆栈信息,以致于无法对该NPE异常进行准确定 ...

  10. MySQL 索引及优化实战

    https://blog.csdn.net/qq_21987433/article/details/79753551 https://tech.meituan.com/mysql_index.html ...