第04章:字典 当索引不好用时

Python唯一的内建的映射类型,无序,但都存储在一个特定的键中。键能够使字符。数字。或者是元祖.

------

字典使用:

表征游戏棋盘的状态,每一个键都是由坐标值组成的元祖

存储文件改动的次数,文件名称作为键

数字电话/地址薄

函数传递值def func(x,*args,**args):

假设要建公司员工与座机号的列表,假设要获得Alice的座机仅仅能这么找

>>> names   = ['Alice','Bob','Tom']

>>> numbers = ['1234','7890','2356']

>>> numbers[names.index('Alice')]

'1234'

真正有用的是phonebook['Alice']='1234', 这里就用到字典

------

字典创建及使用

>>> phonebooks = {'Alice':'1234','Bob':'7890','Tom':'2356'}

Alice为键,'1234'为值

一对键/值为一项.

项与项之间用,分隔,键值之间用:分隔

键值唯一。值能够反复

{} 空字典

dict函数:

能够通过dict函数,由其它键/值或其它字典来创建字典,比方以下:

>>> items = [('name','Gumby'),('age',42)]

>>> d1= dict(items)

>>> d1

{'age': 42, 'name': 'Gumby'}

>>> d1['name']

'Gumby'

也能够通过keyword參数来创建字典,这是字典最实用的功能。在函数中非常实用:

>>> d = dict(name='Sherry',age=35)

>>> d

{'age': 35, 'name': 'Sherry'}------

基本字典操作:

>>> len(d)            #求字典中项的个数,也就是键/值对的值

2

>>> d['name']         #返回关联到键上的值

'Sherry'

>>> d['name']='Jerry' #将值关联到键上d[k]=v

>>> d

{'age': 35, 'name': 'Jerry'}

>>> del d['name']     #删除键为值的项del d[k]

>>> d

{'age': 35}

>>> 'age' in d

True

字典与列表的一些重要差别:

字典中的键数据类型,能够使整型,否点型,字符型,或字典型

字典赋值,能够给空字典赋值,即超过索引外赋值,这点是列表不具备的

k in d:查找的是键 v in l: 查找的是值(查找效率字典比列表高效,数据越多,效果越明显)

第一点:字典中的键能够为不论什么不可变的类型,这是字典最强大的功能。适用范围非常广:

第二点:相同非常重要,比方说,字典能够在空字典中建。列表就不行:

>>> x = []

>>> x[42]='Jerry' #将'Jerry'放到42号位置

Traceback (most recent call last):

File "", line 1, in

x[42]='Jerry'

IndexError: list assignment index out of range

>>> x = {}

>>> x[42]='Jerry'

>>> x

{42: 'Jerry'}

假设真要在42号关联'Jerry'值的话。必须用None来初始化,比方说:

>>> x=[None]*43

>>> x[42]='Jerry'

>>> x

[None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 'Jerry']#电话本的脚本程序#!/usr/bin/env python

#Filename:phonebook.py

people={

'Alice':{'phone':'7890','addr':'street 7890'},

'Jerry':{'phone':'1234','addr':'street 1234'},

'Wendy':{'phone':'5678','addr':'street 5678'}

}

labels={

'phone':'phone number',

'addr':'address'

}

name = raw_input('Enter name:')

request = raw_input('phone number(p) or address(a)?')

if request == 'p': key='phone'

if request == 'a': key='addr'

if name in people: print "%s's %s is %s" \

% (name,labels[key],people[name][key])字典的格式化字符串:(键),假设键在字典中存在,那么就能打印出来,这一功能在模板系统中很实用>>> phonebook={'Alice':'6102','Jerry':'7438','Wendy':'8215'}

>>> print "Wendy's phone number is %(Wendy)s" % phonebook

Wendy's phone number is 8215

以HTML为样例

>>> template = '''

...

%(title)s

...

...

%(title)s

...

%(text)s

...

...

... '''

>>> data = {'title':'My Home Page','text':'Welcome to my home page!'}

>>> print template % data

My Home Page

My Home Page

Welcome to my home page!

Note:

String.Template 类对于此种情形也是很实用的!

------

字典方法:

clear

>>> d={}

>>> d['name']='Alice'

>>> d['age'] = 30

>>> d

{'age': 30, 'name': 'Alice'}

>>> return_value = d.clear()

>>> d

{}

>>> return_value

None注意以下两种情形:

情形一:

>>> x = {}

>>> y = x

>>> x['key'] = 'value'

>>> y

{'key': 'value'}

>>> x

{'key': 'value'}

>>> x = {}

>>> x

{}

>>> y

{'key': 'value'}情形二:

>>> x = {}

>>> y = x

>>> x['key'] = 'value'

>>> x

{'key': 'value'}

>>> x;y

{'key': 'value'}

{'key': 'value'}

>>> x.clear()

>>> x;y

{}

{}假设想清空字典原始数据。就必须用clear()方法

------

copy:

浅拷贝:copy返回键/值一样的数据。但不是副本

>>> x = {'user':'admin','machines':['host1','host2','host3']}

>>> y = x.copy()

>>> y

{'user': 'admin', 'machines': ['host1', 'host2', 'host3']}

>>> y['user']='root'

>>> del y['machines'][2]

>>> y

{'user': 'root', 'machines': ['host1', 'host2']}

>>> x

{'user': 'admin', 'machines': ['host1', 'host2']}能够看出y仅仅是改动的话。原始x不变。但假设删元素的话,x也会变化,假设要改变上述情况,就要用到深拷贝

深拷贝: 键/值一样,并且是副本>>> d = {}

>>> d['name']=['Sherry','Jerry']

>>> c = d.copy()

>>> dc= deepcopy(d)

>>> d['name'].append('Alice')

>>> c

{'name': ['Sherry', 'Jerry', 'Alice']}

>>> dc

{'name': ['Sherry', 'Jerry']}fromkeys:

使用给定的键建立新的字典

#方法一:

>>> {}.fromkeys(['name','age'])

{'age': None, 'name': None}

#方法二:使用dict模块的fromkeys函数

>>> dict.fromkeys(['name','age'])

{'age': None, 'name': None}

#假设不想使用默认的None,能够自己定义,比方说unknown

>>> dict.fromkeys(['name','age'],'unknown')

{'age': 'unknown', 'name': 'unknown'}get:更宽松的訪问字典#一般的方法訪问字典会报错

>>> d={}

>>> print d['name']

Traceback (most recent call last):

File "", line 1, in ?

KeyError: 'name'

#假设用get的话,返回为空,这在程序中比較实用

>>> print d.get('name')

None

#还能够自己定义返回的结果,比方说N/A.没查询到的话就会返回

>>> print d.get('name','N/A')

N/A

#假设有值的话,就能查询到

>>> d={'name':'Jerry'}

>>> d.get('name')

'Jerry'#使用get函数的技巧的脚本[root@host]# cat phone.py

#!/usr/bin/env python

#Filename: phone.py

people={

'Alice':{'phone':'3102','addr':'Street 3102'},

'Jerry':{'phone':'8125','addr':'Street 8125'},

'Wendy':{'phone':'6501','addr':'Street 6501'}

}

#print的时候要用

labels={

'phone':'phone number',

'addr' :'address'

}

name = raw_input('Enter name:')

request = raw_input('Phone number(p) or address(a):')

key = request

if request == 'p': key='phone'

if request == 'a': key='addr'

person = people.get(name,{})

label = labels.get(key,key)

result = person.get(key,'Not Available')

print "%s's %s is %s" % (name,label,result)输出结果:

[root@host]# ./phone.py

Enter name:Alice

Phone number(p) or address(a):p

Alice's phone number is 3102

[root@host]# ./phone.py

Enter name:Jerry

Phone number(p) or address(a):papa

Jerry's papa is Not Available能够看出,在get方法在程序中。即使是没有准备的值。也能做出合适的反应

------

has_key

类似于k in d,检查字典中是否有给定的键.

>>> d={}

>>> d.has_key('name')

False

>>> d['name']='John'

>>> d.has_key('name')

TrueNote: Python 3.0中不包含此函数

------

items和iteritems

>>> d = {'title':'Python web page','url':'http://www.python.org','spam':0}

>>> d.items() #返回一个无序列表

[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python web page')]

>>> d.iteritems() #返回的是一个迭代对象

>>> l= d.iteritems() #用list函数将迭代对象转为列表

>>> list(l)

[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python web page')]Note: iteritems函数效率更高些

------

pop:

用来获得给定键的值,而且将其删除

>>> d = {'x':1,'y':2,'z':3}

>>> d.pop() #注意不能为空。这个要个列表差别开来

Traceback (most recent call last):

File "", line 1, in ?

TypeError: pop expected at least 1 arguments, got 0

>>> d.pop('x')

1

>>> d

{'y': 2, 'z': 3}------

popitem():  弹出最后一项。这个类似于列表中的pop()方法,但由于字典是无序的。

若想一个个移除并处理项,这种方法就很实用,由于不须要获取键的值

>>> d = {'title':'Python web page','url':'http://www.python.org','spam':0}

>>> d.popitem()

('url', 'http://www.python.org')

>>> d

{'spam': 0, 'title': 'Python web page'}------

setdefault:类似于get

>>> d = {} #假设空值的话。setdefault有效

>>> d.setdefault('name','N/A')

'N/A'

>>> d

{'name': 'N/A'}

>>> d = {'name':'Jerry'} #假设本身有值的话,setdefault不生效

>>> d.setdefault('name','N/A')

'Jerry'

>>> d

{'name': 'Jerry'}------

values和itervalues

values:以列表的方式返回字典中的值

itervalues:返回迭代的对象

>>> d={}

>>> d[1]=1

>>> d[2]=2

>>> d[3]=3

>>> d[4]=4

>>> d.values()

[1, 2, 3, 4]

>>> d.itervalues()

>>> l=d.itervalues()

>>> list(l)

[1, 2, 3, 4]------

update:能够用一个字典去更新还有一个字典

>>> d = {

... 'title':'Python Web Page',

... 'url':'http://www.python.org',

... 'changed':'Mar 14 22:09:05 GMT 2014'

... }

>>> x = {'title':'Python Language Page'}

>>> d.update(x)

>>> d

{'url': 'http://www.python.org', 'changed': 'Mar 14 22:09:05 GMT 2014', 'title': 'Python Language Page'}------

本章函数:

dict(seq)

用(键/值)对(或者映射和keyword參数)建立字典

python的符号lt和gt怎么输入_lt;lt;Python基础教程gt;gt;学习笔记 | 第04章 | 字典...相关推荐

  1. python的符号lt和gt怎么输入_lt;lt;Python基础教程gt;gt;学习笔记 | 第12章 | 图形用户界面...

    Python支持的工具包非常多.但没有一个被觉得标准的工具包.用户选择的自由度大些.本章主要介绍最成熟的跨平台工具包wxPython.官方文档: ------ 丰富的平台: Tkinter实际上类似于 ...

  2. Python基础教程学习笔记:第一章 基础知识

    Python基础教程 第二版 学习笔记 1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入&q ...

  3. Python入门(二)——IDE选择PyCharm,输入和输出,基础规范,数据类型和变量,常量,字符串和编码,格式化

    Python入门(二)--IDE选择PyCharm,输入和输出,基础规范,数据类型和变量,常量,字符串和编码,格式化 我们从今天就开始正式的学习PY交易了,PY交易还行,我们有基础之后学习起来倒不是说 ...

  4. Python快速编程入门#学习笔记03# |第二章 :Python基础(代码格式、标识符关键字、变量和数据类型、数字类型以及运算符)

    全文目录 ==先导知识== 学习目标: 2.1 代码格式 2.1.1 注释 2.1.2 缩进 2.1.3 语句换行 2.2 标识符和关键字 2.2.1 标识符 2.2.2 关键字 2.3 变量和数据类 ...

  5. 【Python学习笔记】第一章基础知识:格式化输出,转义字符,变量类型转换,算术运算符,运算符优先级和赋值运算符,逻辑运算符,世界杯案例题目,条件判断if语句,猜拳游戏与三目运算符

    Python学习笔记之[第一章]基础知识 前言: 一.格式化输出 1.基本格式: 2.练习代码: 二.转义字符 1.基本格式: 2.练习代码: 3.输出结果: 三.输入 1.基本格式: 2.练习代码: ...

  6. Python快速编程入门#学习笔记01# |第一章 :Python基础知识 (Python发展历程、常见的开发工具、import模块导入)

    全文目录 ==先导知识== 1 认识Python 1.1.1 Python的发展历程 1.1.2 Python语言的特点 2. Python解释器的安装与Python程序运行 1.2.1 安装Pyth ...

  7. Machine Learning with Python Cookbook 学习笔记 第9章

    Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...

  8. python数据分析基础教程 numpy_Python数据分析基础教程:NumPy学习指南(第2版)

    Python数据分析基础教程:NumPy学习指南(第2版) Ivan Idris (作者) 张驭宇 (译者) NumPy是一个优秀的科学计算库,提供了很多实用的数学函数.强大的多维数组对象和优异的计算 ...

  9. Python学习笔记:列表、字典与集合解析(List, Dict and Set Comprehensions)

    Python学习笔记:列表.字典与集合解析(List, Dict and Set Comprehensions) 1.列表解析 最受喜爱的Python语言特性.过滤一个集合的元素生成一个新的列表. 一 ...

  10. Machine Learning with Python Cookbook 学习笔记 第8章

    Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...

最新文章

  1. 戴上脑机接口头盔,他用大脑跟别人「说话」
  2. mysql 变量作用域_二十二、MySQL基础系列笔记之变量
  3. 极光IM初始化SDK出错
  4. hive 动态分区实现 (hive-1.1.0)
  5. python文本关联分析,详解Python文本操作相关模块
  6. 【CSDN软考VIP资料群】让软考通过更容易,软考资料大全支持你软考!
  7. 入门OJ:最短路径树入门
  8. java int转byte出现负数 byte转int的解决
  9. 要打仗,你手里先得有张地图:数据治理之元数据管理
  10. 自考科目列表,自考本科,题库,自学考试,历年真题
  11. 威金敌敌畏--比特解决威金方案(转)
  12. mysql概念模型中的3种基本联系_数据库建模三步骤:概念模型
  13. 挺全的HTML、CSS整理笔记
  14. 煦涵说Webpack-IE低版本兼容指南
  15. Android java.lang.IllegalStateException: Underflow in restore - more restores than saves
  16. c语言 北京时间转换utc时间_utc时间如何转换为北京时间
  17. GICv3软件overview手册之GICv3基本功能(1)
  18. java audit模块实现_Linux安全审计功能的实现——audit详解
  19. Excel常用公式与函数总结(Excel 2010)
  20. 模型优化-梯度下降算法

热门文章

  1. POJ 2478:Farey Sequence
  2. eclipse alt+/ 无效时,如何设置 《转》
  3. GMF:示例Mindmap 练习一
  4. Unable to get the project ile from the web server的解决方法
  5. python logger.debug_python处理logger日志
  6. storage 主机集群共享卷数据不同步_codis 高可用集群跳过nginx 代理
  7. uniapp php接口如何写,uni-app入门教程之接口的基本使用
  8. python程序运行后没有反应_为什么我的电脑在运行这个python程序时速度变慢,没有反应?...
  9. 另一种阶乘 函数法!
  10. ios浏览器微信支付回调页面_iOS微信系列,WKWebview加载H5进行微信支付返回浏览器解决方案!...