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) 用(键,值)对(或者映射和keyword參数)建立字典

字典演示样例

#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第一个基本教程4章 词典: 当指数不工作时也的更多相关文章

  1. Python第一个基本教程6章 抽象的

    Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32 Type "copyri ...

  2. 简学Python第一章__进入PY的世界

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

  3. python第一章:简介与安装--小白博客

    Python简介 Python是一种计算机程序设计语言.是一种动态的.面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项 ...

  4. Python+Django+SAE系列教程17-----authauth (认证与授权)系统1

    通过session,我们能够在多次浏览器请求中保持数据,接下来的部分就是用session来处理用户登录了. 当然,不能仅凭用户的一面之词,我们就相信,所以我们须要认证. 当然了,Django 也提供了 ...

  5. Python之Numpy详细教程

    NumPy - 简介 NumPy 是一个 Python 包. 它代表 “Numeric Python”. 它是一个由多维数组对象和用于处理数组的例程集合组成的库. Numeric,即 NumPy 的前 ...

  6. Objective-C 基础教程第九章,内存管理

    目录 Object-C 基础教程第九章,内存管理 前言: 对象生命周期 引用计数 RetainCount1项目例子 对象所有权 访问方法中的保留和释放 自动释放 所有对象放入池中 自动释放池的销毁时间 ...

  7. 学习opencv中文版教程——第二章

    学习opencv中文版教程——第二章 所有案例,跑起来~~~然而并没有都跑起来...我只把我能跑的都尽量跑了,毕竟看书还是很生硬,能运行能出结果,才比较好. 越着急,心越慌,越是着急,越要慢,越是陌生 ...

  8. 「Python」pandas入门教程

    pandas适合于许多不同类型的数据,包括: 具有异构类型列的表格数据,例如SQL表格或Excel数据 有序和无序(不一定是固定频率)时间序列数据. 具有行列标签的任意矩阵数据(均匀类型或不同类型) ...

  9. SpringBoot非官方教程 | 终章:文章汇总

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-all/ 本文出自方志朋的博客 SpringBo ...

随机推荐

  1. [Angular2 Router] Guard: CanLoad

    'canLoad' guard can decide whether a lazy load module can be loaded or not. @Injectable() export cla ...

  2. tplink-如何远程WEB管理路由器?

    http://service.tp-link.com.cn/detail_article_185.html 如何远程WEB管理路由器? 新版tplink怎么远程Web管理? https://www.1 ...

  3. C语言高速入门系列(五)

    C语言高速入门系列(五) C语言指针初涉                                           ------转载请注明出处:coder-pig 本节引言: 上一节我们对C ...

  4. Git Push问题remote: hooks/update:10 undefined method &#39;require_relative&#39; for main:Object(NomethodError)

    今天在提交代码时遇到到了一个非常蛋疼的问题,remote: hooks/update:10 undefined method 'require_relative' for main:Object(No ...

  5. 文件控制 fcntl函数具体解释

    摘要:本文主要讨论文件控制fcntl函数的基本应用.dup函数能够拷贝文件描写叙述符,而fcntl函数与dup函数有着异曲同工之妙.而且还有更加强大的功能,能够获取或设置已打开文件的性质,操作文件锁. ...

  6. 【t059】序列

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 生活中,大多数事物都是有序的,因为顺序的美是最令人陶醉的.所以现在RCDH看了不顺的东西就头痛.所以他 ...

  7. Oracle停止一个JOB

    Oracle如何停止一个JOB 相关表.视图 dba_jobs all_jobs user_jobs 包含登录用户所有的JOB信息 dba_jobs_running 包含正在运行job相关信息 注意 ...

  8. Android菜鸟的成长笔记(22)——Android进程间传递复杂数据(AIDL)

    在上一篇中介绍了Andorid中的进程间的通信方式AIDL,本篇文章将介绍传递复杂数据的AIDL Service 下面通过一个示例说明: 本例子中用到了两个自定义类型:Person与Pet, 其中Pe ...

  9. Cordova 代码热更新 - 简书

    原文:Cordova 代码热更新 - 简书 Cordova 代码热更新 [图片上传失败...(image-a19be7-1521624289049)] 基于 Cordova 框架能将网页应用 (js, ...

  10. 【Cocos2d-x Lua】数据库封装类型的操作

    Lua数据库封装类型的操作 使用演示样例 lua代码: require("DB") -- 保存一个字符串(数据库中存储的数据都是以字符串的形式保存的) DB:getInstance ...