字典的使用

现实中的字段及在python中的字段都进行了构建,从而可以轻松查到某个特定的词语(键),从而找到它的意义(值)。

某些情况下,字典比列表更加适用:

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

#  存储文件修改次数,用文件名作为键;

#  数字电话/地址本

创建一个人名列表,以及四位的分机号码:

>>> names=['Alice','Beth','Ceci','Dee-Dee','Earl']
>>> numbers=['2341','9102','3158','0412','5551']
>>> numbers[names.index('Ceci')]#通过此方法查询
'3158'

创建和使用字典

字典可以通过下面的方式创建:

phonebook={'Alice':'2341','Beth':'9102','Ceci':'3158'}

字典由多个键及与其对应的值构成,在上例中,名字是键,电话号码是值。

dict函数

可以用dict 函数,通过其他映射(比如其他字典)或(键,值)这样的序列对建立字典。

>>> itmes=[('name','Gumby'),('age',42)]
>>> d=dict(itmes)
>>> d
{'age': 42, 'name': 'Gumby'}
>>> d['name']
'Gumby'

dict函数也可以通过关键字参数来创建字典,如下例所示
>>> d=dict(name='Gumby',age=42)
>>> d
{'age': 42, 'name': 'Gumby'}

基本字典操作

电话本例子

#简单数据库
#使用人名作为键的字典。每个人用一个字典来表示,其键‘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])

--------------------------------------------

Name: Beth
phone number(p) or address(a)?p
Beth's phone number is 9102.

字典的格式化字符串

>>> phonebook={'Beth':'9102','Alice':'2341','Cecil':'3258'}
>>> "Cecil's phone number is %(Cecil)s."%phonebook
"Cecil's phone number is 3258."

字典方法

clear

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'
>>> x
{'key': 'value'}
>>> x={}
>>> y
{'key': 'value'}

>>> x={}
>>> y=x
>>> x['key']='value'
>>> y
{'key': 'value'}
>>> x.clear()
>>> y
{}

copy

copy方法返回一个相同的具有键值对的新字典

>>> x={'username':'admin','machines':['foo','bar','baz']}
>>> y=x.copy()
>>> y
{'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
>>> y['username']='mlh'
>>> y['machines'].remove('bar')
>>> y
{'username': 'mlh', 'machines': ['foo', 'baz']}
>>> x
{'username': 'admin', 'machines': ['foo', 'baz']}

可以看到当替换副本字典某个值时时原字典不受影响,但当修改某个值时,原字典也受影响

避免这种问题的方法就是使用深复制(deep copy),复制其包含的所有的值,可以使用copy模块中的deepcopy函数来完成

>>> from copy import deepcopy
>>> d={}
>>> d['names']=['alfred','bertrand']
>>> c=d.copy()
>>> c
{'names': ['alfred', 'bertrand']}
>>> dc=deepcopy(d)
>>> dc
{'names': ['alfred', 'bertrand']}

>>> d['names'].append('Clive')
>>> c
{'names': ['alfred', 'bertrand', 'Clive']}
>>> dc
{'names': ['alfred', 'bertrand']}

fromkeys

fromkeys方法使用给定的键建立新的字典,每个键对应默认值为none

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

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

get

get是个更宽松的访问字典的方法

>>> d={}
>>> print d['name']

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

>>> d.get('name','N/A')
'N/A'
>>> d['name']='Eric'
>>> d.get('name')
'Eric'

字典方法示例

#使用get()的简单数据库
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)

----------------------------------------

Name: Beth
phone number(p) or address(a)?batting average
Beth's batting average is not available.

has_key

has_key方法可以检查字典中是否有给出的键

>>> d={}
>>> d.has_key('name')
False
>>> d['name']='Eric'
>>> d.has_key('name')
True

items和iteritems

items方法将所有字典项以列表方式返回,这些列表项中的每一项都来自(键,值)。但是项在返回值时并没有特殊的顺序

>>> 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')]

iteritems方法作用大致相同,但是会返回一个迭代器对象而不是列表
>>> it=d.iteritems()
>>> it
<dictionary-itemiterator object at 0x02A87A80>
>>> list(it) #将迭代器转换为列表
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'python web site')]

keys和iterkeys

keys方法将列表中的键以列表形式返回,iterkeys返回针对键的迭代器

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

>>> d.keys()
['url', 'spam', 'title']
>>> hs=d.iterkeys()
>>> hs
<dictionary-keyiterator object at 0x02A87A50>
>>> list(hs)
['url', 'spam', 'title']

pop

pop方法用来获得对应于给定的键值,然后将这个键值从字典中移除

>>> d={'x':1,'y':2}
>>> d.pop('x')
1
>>> d
{'y': 2}

popitem

popitem方法类似与list.pop,后者会弹出列表的最后一个元素,popitem则会弹出随机项,因为字典没有顺序的概念

>>> d={'title':'python web site','url':'http://www.python.org','spam':0}
>>> d.popitem()
('url', 'http://www.python.org')
>>> d
{'spam': 0, 'title': 'python web site'}

setdefault

setdefault方法在某种程度上类似于get方法,就是能够获得给定键的相关值,除此之外,setdefault还能在不含有给定的键的情况下设定键值

>>> 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}

update

update方法可以利用一个字典更新另一个字典

>>> d={'title':'python web site','url':'http://wwww.python.org','changed':'mar 14 22:09:15 met 2008'}
>>> x={'title':'python language website'}
>>> d.update(x)
>>> d
{'url': 'http://wwww.python.org', 'changed': 'mar 14 22:09:15 met 2008', 'title': 'python language website'}

values和itervalues

values方法以列表的形式返回字典中的值,itervalues返回迭代器

>>> d={}
>>> d[1]=1
>>> d[2]=2
>>> d[3]=3
>>> d[4]=1
>>> d.values()
[1, 2, 3, 1]

>>> it=d.itervalues()
>>> it
<dictionary-valueiterator object at 0x028466F0>
>>> list(it)
[1, 2, 3, 1]

转载于:https://www.cnblogs.com/whats/p/4683492.html

python学习笔记(字典)相关推荐

  1. Python 学习笔记 - 字典

    1.使用字典 字典 是一系列键-值对. * 每个键都与一个值相关联,你可以使用键来访问与之相关联的值. * 与键相关联的值可以是数字.字符串.列表乃至字典. * 事实上,可将任何Python对象用做字 ...

  2. Python学习笔记——字典

    1.创建和访问字典 字典是映射类型,不同于列表类型,列表是用数组存储的,一般通过索引的方式取得相应位置的值 >>> name = ['马龙','李宁','吕小军','施廷懋'] &g ...

  3. 7.Python学习笔记:[字典]

    dic={'name':'liang','age':20,'hobby':'swim'} 增改: dic['age1']=22 #无则增,有则替换 print(dic)a=dic.setdefault ...

  4. Python学习笔记字典之检查字典中是否存在键或值

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  5. Python学习笔记 字典 元组 排序算法 集合

    一.字典:dict 里面的元素是一个键值对: key-value key有3个特点: a.唯一 b.不可变类型 c.无序(没有下标) 1.创建字典: # 创建空字典 d1 = {} # 创建非空字典 ...

  6. Python学习笔记-字典练习

    一.字典(dict) 概念  应用场景:表示学生的 年龄.班级.性别等多个属性. 优点是查询方便. 列表list 类似书的正文,查询不方便: 字典类似书的目录,查询方便. key: 键, 类比偏旁部首 ...

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

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

  8. Python学习笔记:字典(dict)

    Python学习笔记:字典(dict) 字典(dict)可能是最重要的Python内置数据结构,更常用的名称是哈希映射(hash map)或关联数组(associate array).它是键值对的集合 ...

  9. python学习笔记——集合与字典

    python学习笔记--集合与字典 1. 集合的基本概念 1.1 set(x)函数 1.2 集合类型的10个操作函数 2. 字典的基本概念 2.1 字典的索引 2.2 字典的操作 2.3 字典小结 1 ...

  10. Python学习笔记D8(字典与集合)

    Python学习笔记D8(字典与集合) 「字典」定义语法为 {元素1, 元素2, -, 元素n} 其中每一个元素是一个「键值对」- 键:值 (key:value)关键点是「大括号 {}」,「逗号 ,」 ...

最新文章

  1. java 嵌套类 继承_Java嵌套类 - 爱吃苹果的搬运工的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. CoreLocation+MapKit系统定位(含坐标以及详细地址)
  3. @value 默认值为null_JAVA8之妙用Optional解决判断Null为空的问题
  4. oracle数据库笔记---oracleweb视图使用流程,及plsql安装
  5. python正则表达式之match,search,findall区别
  6. HDU1029 Ignatius and the Princess IV
  7. 【优化布局】基于matlab遗传算法求解配电变电站布局优化问题【含Matlab源码 1317期】
  8. 企业架构 | TOGAF架构能力框架
  9. Linux 实现人脸识别
  10. 软件设计文档国家标准—软件需求说明书(GB856T——88)
  11. 2023年CFA一级notesbook1+quicksheet(高清)
  12. Enterprise Architect学习(1)
  13. 我用计算机写作文,教学设计:我用计算机写作文
  14. 60MongoDB学习笔记
  15. unity打包的安卓游戏在某些设备显示异常问题解决
  16. e4e反演框架:Designing an Encoder for StyleGAN Image Manipulation
  17. 数码摄影入门:焦距是什么?
  18. 如何上联想官网查询服务器配置信息,联想服务器型号联想服务器如何鉴别!
  19. SECS/GEM通信协议学习之报文
  20. kong插件开发-完全版

热门文章

  1. 2.监控软件zabbix-客户端安装
  2. 点聚WebOffice 控件 使用LoadOriginalFile 打开服务器文件
  3. 实习技术员的基本功(四)
  4. 二叉树的深度优先和广度优先遍历
  5. ref 与 out 参数的区别
  6. 阻击恶意软件--清除和保护你的网站的小技巧
  7. 问题 E: 序列操作Ⅰ(01背包)
  8. 阿里云低代码行业智能开放平台开拓行业AI应用新方法
  9. 性能测试真如你想象的那么简单?
  10. 一篇文章教会你使用html+css3制作GIF图