`

Python基础教程之第4章 字典: 当索引不好用时

阅读更多
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
#4.1字典的使用
>>> names=['Alice','Beth','Cecil','Dee-Dee','Earl']
>>> numbers=['2341','9102','3158','042','5551']
>>> names=['Alice','Beth','Cecil','Dee-Dee','Earl']
>>> numbers=['2341','9102','3158','042','5551']
>>> numbers[names.index('Cecil')]
'3158'
>>> 0142
98
>>> 0912
SyntaxError: invalid token
>>> 0812
SyntaxError: invalid token
#4.2创建和使用字典
>>> phonebook={'Alice':'2341','Beth':'9102','Cecil':'3258'}
>>> phonebook['Cecil']
'3258'
#4.2.1 dict函数
>>> items=[('name','Gumby'),('age',42)]
>>> d = dict(items)
>>> d
{'age': 42, 'name': 'Gumby'}
>>> d['name']
'Gumby'
>>> d = dict(name='Gumby', age=42)
>>> d
{'age': 42, 'name': 'Gumby'}
#4.2.2 基本字典操作
#len(d)返回d中项(键值对)的数量
#d[k]返回关联到键k上的值
#d[k]=v将值v关联到键k上
#del d[k]删除键为k的项
#k in d检查d中是否包含键为k的项
#键的类型:字典的键可以是整型,浮点型(实型),字符串或元组. 字典的键可以是任何不可变类型.
#在字典中检查键的成员资格比在列表中检查值的成员资格更有效,数据结构的规模越大,两者的效率差距越明显
>>> x=[]
>>> x[42]='Foobar'

Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    x[42]='Foobar'
IndexError: list assignment index out of range
>>> x={}
>>> x[42]='Foobar'
>>> x
{42: 'Foobar'}
#代码清单4-1 字典示例
#4.2.3 字典的格式化字符串
>>> phonebook
{'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}
>>> "Cecil's phone number is %(Cecil)s. " % phonebook
"Cecil's phone number is 3258. "
>>> 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
<html>
	<head><title>My Home Page</title></head>
	<body>
	<h1>My Home Page</h1>
	<p>Welcome to my home page!</p>
	</body>

#4.2.4 字典方法
#1.clear方法
>>> d={}
>>> d['name']='Gumby'
>>> d['age']=42
>>> d
{'age': 42, 'name': 'Gumby'}
>>> returned_value = d.clear()
>>> d
{}
>>> print returned_value
None
>>> x={}
>>> y=x
>>> x['key']='value'
>>> y
{'key': 'value'}
>>> x={}
>>> y
{'key': 'value'}
>>> 
>>> x={}
>>> y=x
>>> x['key']='value'
>>> y
{'key': 'value'}
>>> x.clear()
>>> y
{}
#2.copy方法,这个方法实现的是浅复制(shallow copy)
>>> x={'username':'admin', 'machines':['foo','bar','baz']}
>>> y=x.copy()
>>> y['username']='mlh'
>>> y['machines'].remove('bar')
>>> y
{'username': 'mlh', 'machines': ['foo', 'baz']}
>>> x
{'username': 'admin', 'machines': ['foo', 'baz']}
#使用深复制(deep copy), 复制一个副本
>>> from copy import deepcopy
>>> d={}
>>> d['names']=''Alfred','Bertrand']
SyntaxError: invalid syntax
>>> d['anmes']=['Afred','Bertrand']
>>> c=d.copy()
>>> c
{'anmes': ['Afred', 'Bertrand']}
>>> d['names']=['Alfred','Bertrand']
>>> d
{'names': ['Alfred', 'Bertrand'], 'anmes': ['Afred', 'Bertrand']}
>>> d.clear()
>>> d['names']=['Alfred','Bertrand']
>>> c=d.copy()
>>> c
{'names': ['Alfred', 'Bertrand']}
>>> dc=deepcopy(d)
>>> d['names'].append('Clive')
>>> c
{'names': ['Alfred', 'Bertrand', 'Clive']}
>>> dc
{'names': ['Alfred', 'Bertrand']}

#3.fromkeys方法
>>> {}.fromkeys(['name','age'])
{'age': None, 'name': None}
>>> dict.fromkeys(['name','age'])
{'age': None, 'name': None}
>>> dict.fromkeys(['name','age'], '(unknown)')
{'age': '(unknown)', 'name': '(unknown)'}
>>> 

#4.get方法
>>> d={}
>>> print d['name']

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    print d['name']
KeyError: 'name'
>>> print d.get['name']

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    print d.get['name']
TypeError: 'builtin_function_or_method' object has no attribute '__getitem__'
>>> print d.get('name')
None
>>> d.get('name','N/A')
'N/A'
>>> d['name']='Eric'
>>> d.get('name')
'Eric'
#代码清单4-2 字典方法示例

#5.has_key方法
>>> d={}
>>> d.has_key('name')
False
>>> d['name']='Eric'
>>> d.has_key('name')
True
#6.items和iteritems
>>> d={'title':'Python Web Site', 'url':'http://www.python.org', 'spam':0}
>>> d.items()
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')]
>>> it = d.iteritems()
>>> it
<dictionary-itemiterator object at 0x0134AF30>
>>> list(it) #Convert the iterator to a list
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')]
#7.keys方法和iterkeys方法
#keys方法将字典中的键以列表形式返回,而iterkeys则返回键的迭代器
#8.pop方法
>>> d = {'x':1, 'y':2}
>>> d.pop('x')
1
>>> d
{'y': 2}
>>> 

#9.popitem方法
>>> d={'url':'http://www.python.org', 'spam':0, 'title':'Python Web Site'}
>>> d
{'url': 'http://www.python.org', 'title': 'Python Web Site', 'spam': 0}
>>> d.popitem()
('url', 'http://www.python.org')
>>> d
{'title': 'Python Web Site', 'spam': 0}
>>> d={}
>>> d.setdefault('name', 'N/A')
'N/A'
>>> d
{'name': 'N/A'}
>>> d['name']='Gumby'
>>> d.setdefault('name','N/A')
'Gumby'
>>> d
{'name': 'Gumby'}
>>> d={}
>>> print d.setdefault('name')
None
>>> d
{'name': None}

#11.update方法
>>> d={
	'title':'Python Web Site',
	'url':'http://www.python.org',
	'changed':'Mar 14 22:09:15 MET 2008'
	}
>>> x={'title':'Python Language Website'}
>>> d.update(x)
>>> d
{'url': 'http://www.python.org', 'changed': 'Mar 14 22:09:15 MET 2008', 'title': 'Python Language Website'}

#12. values方法和itervalues方法
>>> d={}
>>> 
>>> d[1]=1
>>> d[2]=2
>>> d[3]=3
>>> d[4]=1
>>> d.values()
[1, 2, 3, 1]
>>> 
#4.3 小结
#映射:映射可以使用任何不可变对象标识元素. 最常用的类型是字符串和元组. Python唯一内建的映射类型是字典.
#利用字典格式化字符串
#字典的方法
#4.3.1本章的新函数
#dict(seq) 用(键,值)对(或者映射和关键字参数)建立字典




字典示例
#coding=utf-8
#e4-1.py 字典示例
#简单数据库
#使用人名作为键的字典,每个人用另一个字典来表示,其键'phone'和'addr'分别表示他们的电话号码和地址.
people = {
	'Alice': {
		'phone':'2341',
		'addr':'Foo drive 23'
	},
	
	'Beth': {
		'phone':'9102',
		'addr':'Bar  street 42'
	},
	
	'Cecil':{
		'phone':'3158',
		'addr':'Baz avenue 90'
	}
}
#针对电话号码和地址使用的描述性标签, 会在打印输出的时候用到
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: print "%s's %s is %s. " % \
	(name, labels[key], people[name][key])
	
#python e4-1.py
#Name: Beth
#Phone number (p) or address (a)? p
#Beth's phone number is 9102.


字典方法示例
#coding=utf-8
#e4-2
#使用get()的简单数据库
#这里添加代码清单4-1中插入数据库的代码
people = {
	'Alice': {
		'phone':'2341',
		'addr':'Foo drive 23'
	},
	
	'Beth': {
		'phone':'9102',
		'addr':'Bar  street 42'
	},
	
	'Cecil':{
		'phone':'3158',
		'addr':'Baz avenue 90'
	}
}

labels = {
	'phone':'phone number',
	'addr':'address'
}

name = raw_input('Name: ')

#查找电话号码还是地址?
request = raw_input('Phone number (p) or address(a)? ')

#使用正确的键
key = request #如果请求既不是'p'也不是'a'
if request == 'p' : key = 'phone'
if request == 'a' : key = 'addr'

#使用get()提供默认值:
person = people.get(name, {})
label = labels.get(key ,key)
result = person.get(key, 'not available')

print "%s's %s is %s. " % (name, label, result)

#python e4-2.py
#Name: Beth
#Phone number (p) or address(a)? a
#Beth's address is Bar  street 42.

#python e4-2.py
#Name: Cecil
#Phone number (p) or address(a)? p
#Cecil's phone number is 3158.

#python e4-2.py
#Name: Cecil
#Phone number (p) or address(a)? x
#Cecil's x is not available.
分享到:
评论

相关推荐

    Python基础教程(第2版.修订版)

    第4章 字典:当索引不好用时 第5章 条件、循环和其他语句 第6章 抽象 第7章 更加抽象 第8章 异常 第9章 魔法方法、属性和迭代器 第10章 充电时刻 第11章 文件和素材 第12章 图形用户界面 第13章 数据库支持...

    python实用案例教程第四章答案-Python基础教程之第4章4.2.2基本字典操作实例.pdf

    python实⽤案例教程第四章答案_Python基础教程之第4章 4.2.2基本字典操作实例 # -*- coding: utf-8 -* #词典定义 people ={ 'Alice': { 'phone':'2341', 'addr':'Foo drive 23'}, 'Beth': { 'phone':'9102', 'addr':...

    python基础与大数据应用第四章-Python基础教程(第四章).pdf

    python基础与⼤数据应⽤第四章_Python基础教程(第四章) dict()函数可通过其它映射或者(键,值)这样的序列建⽴字典 // dict 并不属于函数,它是像list tuple str⼀样的类型 items = [('name', 'gumy'), ('age', 20)...

    Python基础教程-第4章-Python-数据类型.pptx

    Python 基础教程 第4章 Python 数据类型 Python基础教程-第4章-Python-数据类型全文共70页,当前为第1页。 Python 有 6 个主要的标准数据类型: Number(数字); String(字符串); List(列表); Tuple(元组)...

    python基础教程:pandas DataFrame 行列索引及值的获取的方法

    pandas DataFrame是二维的,所以,它既有列索引,又有行索引 上一篇里只介绍了列索引: import pandas as pd df = pd.DataFrame({'A': [0, 1, 2], 'B': [3, 4, 5]}) print df # 结果: A B 0 0 3 1 1 4 2 2 5 行索引...

    Python基础教程:字典和Json.pdf

    Python基础教程:字典和Json 字典是键/值对构成的集合,字典通过⼤括号来创建,字典的键是字符串,⽽值可以是任何数据对象。 字典有两个重要的特征: 字典是⽆序的,字典项没有特定的顺序,只能通过键来获取值; ...

    python基础教程源代码-python基础教程第三版源代码.pdf

    python基础教程源代码-python基础教程第三版源代码 【实例简介】 python基础教程第三版源代码 python基础教程第三版源代码 【实例截图】 【核⼼代码】 Beginning_Python_version3_SourceCode Beginning Python_...

    python基础教程至60课(基础)

    python基础教程至60课(基础) 【Python 第1课】安装 6 【Python 第2课】print 7 【Python 第3课】IDE 10 【Python 第4课】输入 12 【Python 第5课】变量 14 【Python 第6课】bool 16 【Python 第7课】if 19 【Python...

    Python3基础教程第4章.pptx

    第4章组合数据类型 本章主要内容: 集合 列表 元组 字典 迭代和列表解析 Python3基础教程第4章全文共118页,当前为第2页。 4.1 集合 集合(set)是Python 2.4引入的一种类型。 集合常量用大括号表示,例如,{1,2,3}...

    python详细学习教程.rar

    第四章:列表,元组,字典和集合 第五章:Python字符串常用方法 第六章:Python流程控制 第七章:函数和lambda表达式 第八章:Python类和对象 第九章:Python异常处理机制 第十章:类特殊成员 第十一章 Python模块...

    Python-零基础入门 学习套件

    026字典:当索引不好用时2 027集合:在我的世界里,你就是唯一 028文件:因为懂你,所以永恒 029文件:一个任务 030文件系统:介绍一个高大上的东西 031永久存储:腌制一缸美味的泡菜 032异常处理:你不可

    (Python基础教程之十八)Python字典交集–比较两个字典.pdf

    (Python基础教程之⼗⼋)Python字典交集–⽐较两个字典 Python⽰例,⽤于查找2个或更多词典之间的常见项⽬,即字典相交项⽬。 1.使⽤"&"运算符的字典交集 最简单的⽅法是查找键,值或项的交集,即 & 在两个字典...

    python基础教程2-4章.rar

    python基础原始项目文件(包含2-4章内容) python教程(二)之列表与元组 python教程(三)之字符串操作 python教程(四)之字典(1.映射) python教程(四)之字典(2.基本操作) python教程(四)之字典(3.字典...

    Python基础教程第2章.pptx

    Python基础教程第2章全文共133页,当前为第4页。 2.1.1 常量 变量是内存中命名的存储位置,与常量不同的是变量的值可以动态变化。Python的标识符命名规则如下: 标识符名字的第1个字符必须是字母或下划线(_); ...

    Python基础教程 第三版

    Python基础教程 第三版 高清版 Python基础教程 第三版 高清版

    Python基础教程第3章.pptx

    Python程序设计教程 授课教师: 职务: 第1页,共61页。 Python基础教程第3章全文共61页,当前为第... Python基础教程第3章全文共61页,当前为第4页。 3.1.1 自定义函数 可以使用def关键字来创建Python自定义函数,其基

    python基础教程pdf.docx

    python基础教程pdf全文共3页,当前为第1页。python基础教程pdf全文共3页,当前为第1页。《Python基础教程》是2010年人民邮电出版社出版的图书, 作者是桐寺兰(MagnusLieHetland)。 python基础教程pdf全文共3页,当前...

    python基础教程第二版(高清书签中文)

    python 基础教程 第二版 高清 书签 中文: 本书包括Python程序设计的方方面面,首先从Python的安装开始,随后介绍了Python的基础知识和基本概念,包括列表、元组、字符串、字典以及各种语句。然后循序渐进地介绍了...

    python基础教程txt免费-Python基础教程(第2版).pdf

    python基础教程txt免费-Python基础教程(第2版) 《Python基础教程(第2版)》内容涉及的范围较⼴,既能为初学者夯实基础,⼜能帮助程序员提升技能,适合各个层次的Python开发⼈员 阅读参考。《Python基础教程(第2版)...

    PythonWeb开发基础教程-第2章-Django配置.pptx

    2.1.1 基本配置 settings.py文件的主要代码: …… PythonWeb开发基础教程-第2章-Django配置全文共21页,当前为第4页。 settings.py文件中主要的配置变量说明如下。 1.BASE_DIR BASE_DIR变量设置项目在系统中的...

Global site tag (gtag.js) - Google Analytics