Python第四章-字典
第四章 字典-当索引不好用时
4.0
字典可以理解成是C++里的map,可以映射任何类型。字典这种结构类型称为映射(mapping)。
字典是Python中唯一内建的映射类型,字典中的值并没有特殊顺序,但是都是存在一个特定的键里。键可以是数字、字符串甚至是元组。
4.1-4.2 了解创建和使用字典
{
>>> phonebook = {'Alice':'2345' ,'Beth':'9102' ,'Cecil':'3258'}
>>> phonebook['Alice']
'2345'
>>> phonebool['asd']
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
phonebool['asd']
NameError: name 'phonebool' is not defined
}
4.2.1 dict函数
可以通过dict函数,通过其他映射(比如其他字典)或者(键,值)这样的序列对建立字典。
>>> items = [('name' ,'Gumby') ,('age' ,42)]
>>> d = dict(items)
>>> d
{'name': 'Gumby', 'age': 42}
>>> d['name']
'Gumby'
dict函数也可以通过关键字参数来创建字典
>>> d = dict(name='Gumby' ,age=42)
>>> d
{'name': 'Gumby', 'age': 42}
4.2.2 基本字典操作
len(d)
d[k]
d[k]= v
k in d k是键不是值
键类型:其他不可变类型
4.2.3 格式化字符
phonebook = {\
'Beth' : '9102' ,'Alice' : '2341' ,'Cecil' : '3258'\
}
"Cecil's phone number is %(Cecil)s." % phonebook
"Cecil's phone number is 3258."
替换html里面变量
{
>>> template = '''<html>
<head><title>%(title)s</title></head>
<body>
<hl>%(title)s</hl>
<p>%(text)s</p>
</body>'''
>>> data = {'title':'Mu Home Page' ,'text':'Welcome to my home page!'}
>>> print (template % data)
<html>
<head><title>Mu Home Page</title></head>
<body>
<hl>Mu Home Page</hl>
<p>Welcome to my home page!</p>
</body>
>>>
4.2.4 字典方法
1.clear
{
A:
>>> d = {}
>>> d['name'] = 'Gumby'
>>> d['age'] = 42
>>> d
{'name': 'Gumby', 'age': 42}
>>> return_value = d.clear()
>>> d
{}
>>> print(return_value)
None
B:
>>> x = {}
>>> y = x
>>> x['key'] = 'value'
>>> y
{'key': 'value'}
>>> x = {}
>>> y
{'key': 'value'}
>>> x
{}
C:
>>> x = {}
>>> y = x
>>> x['key'] = 'value'
>>> y
{'key': 'value'}
>>> x.clear()
>>> y
{}
>>> x
{}
}
2.
A:copy(浅复制)
<注意一个问题,虽然是浅复制,但是=并不能导致值修改的同步,用方法才行>
{
>>> x = {'username':'admin' ,'machines':['foo' ,'bar','baz']}
>>> y = x.copy()
>>> y['username'] = 'mlh'
>>> y['machines'].remove('bar')
>>> y
{'machines': ['foo', 'baz'], 'username': 'mlh'}
>>> x
'machines': ['foo', 'baz'], 'username': 'admin'}
>>>
}
B:deepcopy 这个可以理解成是真正的把值拷贝过去
{
>>> from copy import deepcopy
>>> d = {}
>>> d['name'] = ['Alfred' ,'Bertrand']
>>> c = d.copy()
>>> dc = deepcopy(d);
>>> d['name'].append('CVasdsa')
>>> c
{'name': ['Alfred', 'Bertrand', 'CVasdsa']}
>>> dc
{'name': ['Alfred', 'Bertrand']}
>>>
}
3.fromkeys
fromkeys方法使用给定的键建立新的字典,每个键默认对应的值是None
{
>>> {}.fromkeys(['name','age'])
{'name': None, 'age': None}
>>> dict.fromkeys(['name','age'])
{'name': None, 'age': None}
>>> #默认值
>>> dict.fromkeys(['name','age'] ,'(unknown)')
{'name': '(unknown)', 'age': '(unknown)'}
>>>
}
4.get
更宽松的访问字典的方法,不存在不会报错,而且支持默认参数
{
>>> d = {}
>>> print(d['name'])
Traceback (most recent call last):
File "<pyshell#82>", line 1, in <module>
print(d['name'])
KeyError: 'name'
>>> print(d.get('name'))
None
>>> print(d.get('name','N/A'))
N/A
}
5.has_key 判断键在不在(3.0之上的版本不支持,我下面给出2.7.6的例子)
{
>>> d = {}
>>> d.has_key('name')
False
>>> d.has_key('name')
True
}
6.items和iteritems
items方法将所有的字典项以列表方式返回,这些列表项中的每一项都来自于(键,值)
但是项在返回时并没有特殊的顺序。
{
>>> d = {'title':'Python web stre' ,'url' : 'http://www.python.org' ,'spam':0}
>>> d.items()
dict_items([('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python web stre')])
>>> #iteritems方法的作用大致相同,但是会返回一个迭代器对象而不是列表
<但是 什么鬼? 编译错误了!>
>>> it = d.iteritems()
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
it = d.iteritems()
}
7.keys和iterkeys
keys方法将字典中的键以列表方式返回,而iterkeys则返回针对键的迭代器。
{
>>> d = {'x':1 ,'y' :2}
>>> d.keys()
dict_keys(['y', 'x'])
>>> it = d.iterkeys()
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
it = d.iterkeys()
AttributeError: 'dict' object has no attribute 'iterkeys'
}
8.pop
pop方法返回字典的给定键的值,并且从字典中把这个键值对删除。
{
>>> d = {'x':1 , 'y':2}
>>> d.pop('x')
1
>>> d
{'y': 2}
}
9.popitem
随机弹出来一组键值对,因为存数不是序列的,所以不能控制顺序。
<注意和pop的区别,pop是弹出来一个指定键的,poptiem是随机弹出来一个删除>
{
>>> d = {
'url':'http://www.python.org' ,'spam':0 ,'title':'Python Web Site'
}
>>> d.popitem()
('title', 'Python Web Site')
>>> d
{'url': 'http://www.python.org', 'spam': 0}
>>>
}
10.setdefault
setdefault方法设定值,如果存在那就不修改,否则就增加上,如果默认参数是空,那么就默认None
{
>>> d = {}
>>> d.setdefault('name' ,'N/A')
'N/A'
>>> d
{'name': 'N/A'}
>>> d['name'] = 'Gumby'
>>> d.setdefault('name' ,'N/A')
'Gumby'
>>> d
{'name': 'Gumby'}
}
11.update
update方法可以利用一个字典项更新另一个字典项:
<有就覆盖,没有就直接增加>
{
>>> d = {
'title':'Python Web Site',
'url' : 'http://www.python.org',
'changet':'Mar 14 22:09:15 MET 2008'
}
>>> x = {'title' : 'Python Language Website'}
>>> d.update(x)
>>> d
{'changet': 'Mar 14 22:09:15 MET 2008', 'url': 'http://www.python.org', 'title': 'Python Language Website'}
}
12.values和itervalues
返回value,一个是列表,一个是索引
{
>>> d = {}
>>> d[1] = 1
>>> d[2] = 2
>>> d[3] = 3
>>> d[4] = 1
>>> d.values()
dict_values([1, 2, 3, 1])
}
Python第四章-字典的更多相关文章
- 简学Python第四章__装饰器、迭代器、列表生成式
Python第四章__装饰器.迭代器 欢迎加入Linux_Python学习群 群号:478616847 目录: 列表生成式 生成器 迭代器 单层装饰器(无参) 多层装饰器(有参) 冒泡算法 代码开发 ...
- 《Python基础教程(第二版)》学习笔记 -> 第四章 字典
字典是Python中唯一内建的映射类型. 字典中的值并没有特殊的顺序,但是都存储在一个特定的键(Key)里.键可以是数字.字符串甚至是元组. 字典的使用 某些情况下,字典比列表更加适用: 表征游戏棋盘 ...
- Python基础 第四章 字典(2)字典方法&章小结
1. clear 方法clear删除所有的字典项,就地执行,什么都不返回(或者说返回None) d = {} d['name'] = 'Gumby' d['age'] = 42 print(d) re ...
- Python基础 第四章 字典(1)
通过名称来访问其各个值的数据结构,映射(mapping). 字典,是Python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下.(键,可能是数.字符串.元组). 1.1 字典由 键 及其相 ...
- python第四章:函数--小白博客
Python函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...
- 流畅的python第四章文本和字节序列学习记录
字符问题 把码位转化成字节序列的过程是编码,把字节序列转化成码位的过程是解码 把unicode字符串当成人类可读的文本,码位当成机器可读的, 将字节序列编程人类可读是解码,把字符串编码成字节序列是编码 ...
- Python第四章(北理国家精品课 嵩天等)
一.程序的分支结构 二.身体质量指数BMI #CalBIv1.py height,weight = eval((input("请输入身高(米)和体重\(公斤)[逗号隔开]:"))) ...
- 流畅的python第三章字典和集合学习记录
什么是可散列的数据类型 如果一个对象是可散列的,那么在这个对象的生命周期中,他的散列值是不变的,而且这个对象需要实现__hash__()方法.另外可散列对象还要有__qe__()方法.这样才能跟其他键 ...
- Python第四章-流程控制
流程控制 在以前的代码中,所有的代码都是交由 Python 忠实地从头执行到结束.但是这些远远不够.很多时候需要根据不同的情况执行不同的代码. 如果你想改变这一工作流程,应该怎么做? 就像这样的情况: ...
随机推荐
- salesforce零基础学习(一百零一)如何了解你的代码得运行上下文
本篇参考:https://developer.salesforce.com/docs/atlas.en-us.228.0.apexcode.meta/apexcode/apex_enum_System ...
- 14. vue源码入口+项目结构分析
一. vue源码 我们安装好vue以后, 如何了解vue的的代码结构, 从哪里下手呢? 1.1. vue源码入口 vue的入口是package.json 来分别看看是什么含义 dependences: ...
- 通达OA 页面敏感信息-2013/2015版本
参考 http://wiki.0-sec.org/0day/%E9%80%9A%E8%BE%BEoa/4.html 漏洞影响 2013.2015版本 复现过程 POC: http://0-sec.or ...
- 利用xslt与xml实现具体字段字母的大小写转换
定义一个全局的变量 <xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'" ...
- 如何下载Image Properties Context Menu(图片)插件
如何下载Image Properties Context Menu(图片)插件 可以通过:http://www.cnplugins.com/zhuanti/four-image-processing. ...
- Redis 通过 RDB 方式进行数据备份与还原
Redis 通过 RDB 方式进行数据备份与还原 Intro 有的时候我们需要对 Redis 的数据进行迁移,今天介绍一下通过 RDB(快照)文件进行 Redis 数据的备份和还原 Redis 持久化 ...
- 一文搞懂如何实现 Go 超时控制
为什么需要超时控制? 请求时间过长,用户侧可能已经离开本页面了,服务端还在消耗资源处理,得到的结果没有意义 过长时间的服务端处理会占用过多资源,导致并发能力下降,甚至出现不可用事故 Go 超时控制必要 ...
- 论Redis分布式锁的正确使用姿势
前言 日常开发中,秒杀下单.抢红包等等业务场景,都需要用到分布式锁.而Redis非常适合作为分布式锁使用.本文将分七个方案展开,跟大家探讨Redis分布式锁的正确使用方式.如果有不正确的地方,欢迎大家 ...
- 运维趋势2019年总结,运维就是要做到"技多不压身"
2019年 在互联网这个行业中对运维的要求越来越来越高,比如2015.16年的时候,运维只是做一些人力投入的事情,比如重启个服务,搭建一个nginx,mysql主从服务,简单的优化一下,就可以上线了, ...
- ubuntu20.04开机显示recovering journal死机的解决方法
事发突然,在今天开机的时候无法进入登陆界面,一直卡在黑屏界面,屏幕上只显示几行代码,且任何按键都无法起作用 /dev/sdb2:recovering journal /dev/sdb2:Clearin ...