`
lovnet
  • 浏览: 6900980 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

python 系统学习笔记(五)---字典

 
阅读更多
字典类似于你通过联系人名字查找地址和联系人详细情况的地址簿,即,我们把键(名字)和值(详细情
况)联系在一起。注意,键必须是唯一的,就像如果有两个人恰巧同名的话,你无法找到正确的信息。
注意,你只能使用不可变的对象(比如字符串)来作为字典的键,但是你可以不可变或可变的对象作为字
典的值。基本说来就是,你应该只使用简单的对象作为键。
键值对在字典中以这样的方式标记:d = {key1 : value1, key2 : value2 }。注意它们的
键/值对用冒号分割,而各个对用逗号分割,所有这些都包括在花括号中。
记住字典中的键/值对是没有顺序的。如果你想要一个特定的顺序,那么你应该在使用前自己对它们排序。
字典是dict类的实例/对象。

dictionary: 字典(即C++标准库的map)
dict = {'ob1':'computer', 'ob2':'mouse', 'ob3':'printer'}
每一个元素是pair,包含key、value两部分。key是Integer或string类型,value 是任意类型。
键是唯一的,字典只认最后一个赋的键值。

  • 通过键来存取,而非偏移量;
  • 键值对是无序的;
  • 键和值可以是任意对象;
  • 长度可变,任意嵌套;
  • 在字典里,不能再有序列操作,虽然字典在某些方面与列表类似,但不要把列表套在字典上

  • 字典的创建
1.直接创建:phonebook={'Alice':'2341','Beth':'9102','Cecil':'3258'}(键和值用冒号隔开,各个键值对键用逗号隔开)
2.dict函数:
>>>items=[('name','Gumby'),('age',42)]#dict的第一种方法
>>>d=dict(items)
{'age':42,'name':'Gumby'}
>>>d=dict(name='Gumby',age=42)#dict的第二种方法
{'age':42,'name':'Gumby'}
>>>d['***al']='boy'
{'age':42,'name':'Gumby','***ual':'boy'}
  • *字典的格式化字符串*(很有用)
在转换说明符中的%字符后面,可以加上用圆括号括起来的键,后面再更其他说明元素。
phonebook={'Alice':'2341','Beth':'9102','Cecil':'3258'}
print "Alice's phone number is
%(Alice)s,Cecil'sphone number is%(Cecil)s"%phonebook#%(Alice)s的s表示输出字符串的意思
-->Alice's phone number is2341,Cecil'sphone number is3258
注:这类字符串格式化在模板系统中非常有用,string.Template类对于这类应用也是非常有用的。
  • 字典的方法
1.clear
清除字典中的所有项:
phonebook.clear()#phonebook是一个字典对象
2.copy
浅复制:只复制字典中的父对象,对子对象采取引用的办法。改变子对象的内容会影响到复制和被复制的字典。
例:
x={'username':'admin','machines':['foo','bar','baz']}
y=x.copy()
y['username']='Allen'
y['machines'].remove('bar')
print y
print x
输出:

{'username':'Allen','machines':['foo','baz']} #y
{'username':'admin','machines':['foo','baz']} #x 链表子对象中的值改变,会影响两个字典。子对象采取应用的方法。
深度复制deepcopy,完全复制,新字典的改变不会影响原来的字典。
from copy import deepcopy
d={'username':'admin','machines':['foo','bar','baz']}
dc=deepcopy(d)
3.fromkeys
使用给定的键建立新的字典,每个键默认对应的值为None。
{}.fromkey(['name','age'])
-->{'age':None,'name':None}
dict.fromkey(['name','age'])#直接在所有字典的类型dict上调用方法
-->{'age':None,'name':None}
dict.fromkey(['name','age'],'(unknown)')#不用None作为默认值,自己提供默认值
-->{'age':'(unknown)','name':'(unknown)'}
4.get
get方法是一个更宽松的访问字典项的方法。一般来说,如果试图访问字典中不存在的项时会出错。而用get就不会。
例:
>>>d={}#空字典
>>>print d['name']
Traceback........ #出错信息
>>>print d.get('name')
None #可以自定义默认值代替None,如d.get('name','N/A'),如果没有name项就打印N/A
5.has_key
检查字典中是否含有给出的键。d.has_key(k)相当于k in d。Python3.0中不包含这个函数。
>>>d={'name':'fuss'}
>>>d.has_key('age')
False
>>>d.has_key('name')
True
6.items和iteritems
items方法将所有字典项以列表方式返回。
>>>d={'name':'fu','age':24,'***al':'boy'}
>>>d.items()
[('age', 24), ('name', 'fu'), ('***ual', 'boy')] #返回没有特殊的顺序

iteritems方法的作用大致相同,但是会返回一个迭代器对象而不是列表:
>>>it=d.iteritems()
>>>it
<dictionary-itemiterator object at 0x011DA580>
>>>list(it)
[('age', 24), ('name', 'fu'), ('***ual', 'boy')]
7.keys和iterkeys
keys方法将字典中的键以列表的形式返回,而iterkeys则返回针对键的迭代器。
>>>d.keys()
['age', 'name', '***ual']
8.pop
用来获得对应于给定键的值,然后将这个键值对从字典移除。
>>>d={'x':1,'y':2}
>>>d.pop('x')
1
>>>d
{'y':2}
9.popitem
popitem方法类似于list.pop,后者会弹出列表的最后一个元素。但popitem弹出的是随机项,以为字典没有"最后的元素"或其他有关顺序的概念。
>>>d={'x':1,'y':2}
>>>d.popitem()
('x':1) #随机的
10.setdefault
setdefault方法在某种程度上类似于get方法,就是能获得与给定键关联的值,除此之外,setdefault还能在字典中不含有给定键的情况下设定相应的键值。
>>>d={}
>>>d.setdefault('name','N/A')
'N/A'
>>>d
{'name':'N/A'}
>>>d['name']='Allen'
>>>d.setdefault('name','N/A')
'Allen'
>>>d
{'name':'Allen'}
11.update
update方法可以利用一个字典项更新另外一个字典:
>>>d={'x':123,'y':456}
>>>b={'x':789}
>>>d.update(b)
>>>d
{'x':789,'y':456}
提供的字典项会被添加到旧的字典中,若有相同的键则会进行覆盖。
12.values和itervalues
values方法一列表的形式返回字典的值(itervalues返回值的迭代器)。与keys对比(对应关系)
例:
d={'name':'fu','age':24,'***ual':'boy'}
printd.keys() #返回字典的键列表
print d.values() #返回字典的值列表
['age', 'name', '***ual'] #键列表
['fu',24,'boy'] #值列表

# -*- coding: cp936 -*-

params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}

print params.keys()  

print  params.values()

print params.items()

print [ k for k, v in params.items()]               

print [v for k, v in params.items()]               

print ["%s=%s" % (k, v) for k, v in params.items()]

print params.has_key("server")

print params.get("server")

params["pwd"]="hello pwd"

print params.items()

params["hello list"]=[1,2,3,4]

print params

del params["hello list"]

print params

#print params.popitem()

#遍历

for key in params.keys():

    print key, '\t', params[key]

    

#join 连接

print ";".join(["%s=%s" % (k, v*2) for k, v in params.items()])


利用字典实现简单的switch 类型语句。(第一节的时候已经写了)

from __future__ import division

x = 1

y = 2

operator = "/"

result = {

    "+" : x + y,

    "-" : x - y,

    "*" : x * y,

    "/" : x / y

}

print result.get(operator)



练习题

颠倒字典中的键和值。用一个字典做输入,输出另一个字典,用前者的键做值,前者的
值做键。但是如果value 相同要求保留前一个

d={'abc':1,'def':2,'ghi':3,'jkl':3} =》{1:'abc',2:'def',3:'ghi'}

分享到:
评论

相关推荐

    Python学习笔记--皮大庆.pdf.zip

    【Python学习笔记--皮大庆.pdf.zip】是一个针对初学者的Python编程教程,源自英文书籍《How to think like a computer scientist》。这本书以易懂的方式介绍了Python语言的基础知识,旨在帮助没有编程背景的人快速...

    Python学习笔记1 ~ Python学习笔记9 - 海龟画图.zip

    Python学习笔记0001 - 安装与配置Python开发环境 Python学习笔记0002 - 海龟画图 - 初画图形 Python学习笔记0003 - 海龟画图 - 变量 Python学习笔记0004 - 海龟画图 - for循环 ...Python学习笔记0009 - 海龟画图 - 字典

    Python学习笔记--皮大庆

    在Python学习笔记中,作者皮大庆介绍了Python的基础知识,包括程序、调试、程序语言与自然语言的关系、第一个程序的编写等。接着,笔记进入了变量、表达式、语句等基础概念的讲解,逐步深入到函数的定义、使用、参数...

    python学习笔记1-(廖雪峰教程,菜鸟教程)python基础.pdf

    以上就是Python学习笔记1中的主要内容,这些基础知识构成了Python编程的基础,是学习更高级特性和应用的基础。对于初学者来说,熟练掌握这些内容是非常重要的。在后续的学习中,还会涉及到函数、模块、面向对象编程...

    《强烈推荐》Python学习笔记--皮大庆

    在这一段文字中,我们看到了Python学习笔记的概览和一些关于Python语言的基本信息。首先,皮大庆作为作者,他的学习笔记是基于《How to think like a computer scientist》这本书编写的,非常适合初学者入门,也是...

    Python学习笔记-王纯业

    【Python学习笔记-王纯业】是一份专为Python初学者设计的教程,由王纯业编撰。这个教程深入浅出地介绍了Python编程的基础知识,帮助初学者快速上手。下面将详细阐述该教程中可能包含的重要知识点,以及Python入门者...

    Python-Core-50-Courses-master.rar

    "Python-Core-50-Courses-master.rar" 是一个压缩包,其中包含了一个完整的Python基础课程集合,非常适合Python初学者进行系统学习。这个压缩包可能包含了各种教程、笔记、练习和项目,旨在帮助学习者全面掌握Python...

    02-python-字典-集合-不可变集合-赋值机制

    通过学习这些知识点,你可以更好地理解和利用Python中的字典、集合和不可变集合,以及它们在实际编程中的应用。了解赋值机制可以帮助避免意外的副作用,并提高代码的可读性和可维护性。在编程实践中,合理运用这些...

    Python语言学习笔记

    这份“Python语言学习笔记”是一份开源文档,最初发布在GitHub上,作者希望借助开放的精神将其分享出来。文档主要包含两大部分,第一部分是Python语言的基础知识,第二部分则是关于Python标准库的介绍。文档适合已经...

    Python[学习笔记]第二版.pdf

    不过,根据标题《Python[学习笔记]第二版.pdf》和描述信息,我们可以推测文档很可能是关于Python编程的学习资料,第二版可能意味着这是对之前版本的更新或修订。 基于这一点,我们可以推测文档中可能涵盖了以下...

    python学习笔记与简明教程

    ### Python学习笔记与简明教程知识点汇总 #### Python 第1课:安装 - **知识点**: - Python 安装包的选择与下载。 - 安装过程中注意事项,如添加环境变量等。 - 验证Python是否安装成功的方法。 #### Python ...

    Python3学习笔记整理

    【Python3学习笔记整理】 在Python3的学习过程中,掌握一系列核心概念和技能是至关重要的。这份笔记涵盖了Python的基础语法、数据结构、控制流、函数、模块化编程、面向对象编程等多个方面,旨在帮助初学者系统地...

    王纯业的Python学习笔记

    《王纯业的Python学习笔记》是一份专为Python初学者和进阶者设计的学习资料,旨在帮助读者全面掌握这门强大的编程语言。Python作为一门高级编程语言,因其简洁、易读的语法特性,被广泛应用于数据分析、机器学习、...

    python基础学习笔记

    本文档是一份详尽的Python基础学习笔记,...整体而言,这份学习笔记为初学者提供了一个全面、系统的Python入门路径,包含了从基础语法到面向对象编程的完整知识框架,非常适合对Python感兴趣的初学者进行学习和实践。

    赵璐python教程答案-Python学习习题笔记-基础篇.pdf

    【Python基础知识】 1. 字符串操作:在Python中,字符串是不可变数据类型,意味着一旦创建就不能直接修改。尝试对字符串的某个位置赋值,如`info[2] = 'd'`会引发`...掌握这些基础将有助于进一步深入学习Python编程。

    Python学习笔记-

    ### Python学习笔记知识点总结 #### 一、Python简介与特点 **Python**是一种新兴的、免费的、解释型的、可移植的、开放源代码的脚本编程语言。它不仅适用于快速开发简单脚本,也适合开发复杂的应用程序。Python...

    Python学习笔记.pdf

    ### Python学习笔记知识点详解 #### 一、Python简介与特性 **标题与描述解析:** "Python学习笔记.pdf" 的标题直接指出了文档的主题——Python的学习资料,而描述的重复表明该文档的主要内容即为Python的学习笔记...

    python学习笔记-初识python

    【Python学习笔记-初识Python】 在编程世界中,Python是一种高级、通用的解释型编程语言,以其简洁、易读的语法和强大的功能而受到广大程序员的青睐。本笔记将带你初识Python的魅力,理解其核心概念,并为你提供...

    python学习笔记-王纯业

    以下是一个Python学习笔记的大纲,涵盖了从基础到进阶的内容。你可以根据自己的学习进度和理解情况,逐步填充和完善这个大纲。 Python学习笔记大纲 一、Python基础 Python简介 Python的历史 Python的特点和应用...

Global site tag (gtag.js) - Google Analytics