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. 【31.72%】【codeforces 604B】More Cowbell

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  2. java开发SSM框架的搭建(SpringMVC+Spring+MyBatis)

    因为某些原因,重装系统,java-web开发尽管顺手,但烦人的一点是开发环境的搭建.几乎相同折腾了一整天,笔者在这里把SSM开发环境的搭建又一次清理一遍,以飨读者.也供自己以后參考.善于总结,是做好每 ...

  3. 【codeforces 742C】Arpa's loud Owf and Mehrdad's evil plan

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  4. HDOJ 5001 Walk

    概率DP dp[j][d] 表示不经过i点走d步到j的概率, dp[j][d]=sigma ( dp[k][d-1] * Probability ) ans = sigma ( dp[j][D] ) ...

  5. SYSTEMTIME 与 time_t 之间的转换,计算2个SYSTEMTIME的时间差

    time_t systemtime_to_time_t(const SYSTEMTIME& st) { struct tm gm = {st.wSecond, st.wMinute, st.w ...

  6. thinkphp5多级控制器是什么?怎么使用?

    thinkphp5多级控制器是什么?怎么使用? 一.总结 1.多级控制器是让控制器的级数变成多级,也就是controller目录下可以新建其它目录. 2.使用的话注意目录下的控制的的命名空间(加上目录 ...

  7. 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(2)准备知识

    一.变量为什么必须初始化? 在回答这个问题之前,我们先来运行一段代码: #include <stdio.h> int main(){ int i; printf("i=%d\n& ...

  8. 【codeforces 760B】Frodo and pillows

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  9. expdp之后scp的惊险时刻

    今天在导出数据的时候.忽然就想起了上次导数据的惊险时刻. 当时导出数据,有40g.分盘./backup有几T的空间,非常easy.果断搞! 是daochu.dmp,导出后传到还有一个主机,还有一个主机 ...

  10. 孔雀翎----《Programming C# 》中国版 文章4版

    孔雀翎----<Programming C# >中国版 文章4版 页:http://blog.csdn.net/21aspnet/           时间:2007.8.7 电子工业出版 ...