字典一种用名字来引用值的数据结构,这种数据结构称为 映射(mapping) 。字典中的键可以是数字、字符串和元组。

字典 创建和使用

创建

phonebook = {'Aaron':13300000000,'Beth':13311111111,'Alice':13322222222}

键和值用 : 隔开

项之间的用 , 隔开

整个字典 大括号扩起来 { }

Dict函数 创建 和 访问

>>> phonebook = dict(Aaron=13300000000,Beth=13311111111)
>>> phonebook['Aaron']
13300000000L

字典操作

字典大部分函数和序列类似:

  • len(dict) 返回dict中 项 数量
  • d[k]    返回 字典 K 键 值
  • d[k] = v  修改值
  • del d[k]   删除项
  • k in d   检查是否包含 k 键 项

键的类型必须是不可变的类型,如浮点型、字符串和元组。

>>> x = []
>>> x[42] = 'Foobar'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> x = [None] * 43
>>> x[42] = 'Foobar'
>>> x[42]
'Foobar'
>>> x = {}
>>> x[42] = 'Foobar'
>>> x[42]
'Foobar'

代码示例 电话本例子

people = {
'Alice':{
'phone':'',
'addr':'Address 1'
},
'Aaron':{
'phone':'',
'addr':'Address 2'
}
}
name = raw_input('Name:') if name in people:
info = people[name];
print "%s's %s %s" % (name,info['phone'],info['addr']);

字典 格式化字符串

>>> phonebook = {'Aaron':456453,'Cecil':32588}
>>> 'Aaron\'s phone number is %(Aaron)s' % phonebook
"Aaron's phone number is 456453"

只要要格式化的键,能在字典里找到,就能转换。一般在html模板里,非常有用。

同样也可以在 string.Template 使用

>>> phonebook = {'Aaron':456453,'Cecil':32588}
>>> from string import Template
>>> tempLate = Template('Aaron\'s phone number is %(Aaron)s')
>>> tempLate.substitute(phonebook)
"Aaron's phone number is %(Aaron)s"

字典方法

示例一  clear

clear 清除字典所有项

>>> phonebook = {'Aaron':456453,'Cecil':32588}
>>> phonebook
{'Aaron': 456453, 'Cecil': 32588}
>>> phonebook.clear()
>>> phonebook
{}

示例二 copy

copy 返回一个字典(浅复制)的一个新字典

浅复制示例

>>> a = {'name':'name1','info':[1,2,3,4,5]}
>>> b = a.copy()
>>> a,b
({'info': [1, 2, 3, 4, 5], 'name': 'name1'}, {'info': [1, 2, 3, 4, 5], 'name': '
name1'})
>>> b['name'] = 'name2'
>>> a,b
({'info': [1, 2, 3, 4, 5], 'name': 'name1'}, {'info': [1, 2, 3, 4, 5], 'name': '
name2'})
>>> a['info'].remove(2)
>>> a,b
({'info': [1, 3, 4, 5], 'name': 'name1'}, {'info': [1, 3, 4, 5], 'name': 'name2'
})

深复制示例

需要用到 copy模块的deepcopy函数

>>> from copy import deepcopy
>>> b = deepcopy(a)
>>> a['info'].remove(3)
>>> a,b
({'info': [1, 4, 5], 'name': 'name1'}, {'info': [1, 3, 4, 5], 'name': 'name1'})

示例三 fromkeys

fromkeys 设置字典的键,修改指定值

>>> a = {}
>>> a.fromkeys(['name','info'],'string')
{'info': 'string', 'name': 'string'}

如果不设置默认值,将是 None

>>> a.fromkeys(['name','info'])
{'info': None, 'name': None}

如果该键已经存在字典中,仍然会修改字典。

示例四 get

获得字典键对应的值,当访问不存在的键,没有任何异常,会得到None,也可以定义默认的值。

>>> a = {'name':'Aaron'}
>>> a['name']
'Aaron'
>>> a.get('name')
'Aaron'
>>> a['age']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'age'
>>> a.get('age')
>>> print a.get('age')
None
>>> print a.get('age','N/A')
N/A

使用字典的示例

people = {
'Alice':{
'phone':'',
'addr':'Address 1'
},
'Aaron':{
'phone':'',
'addr':'Address 2'
}
} name = raw_input('Name:')
request = raw_input('Request:') info = people.get(name)
if info:
requestInfo = info.get(request,"No Info")
else:
requestInfo = "No Info"
print 'name:%s %s:%s' % (name,request,requestInfo)

运行结果

C:\Users\ChengXu1\Desktop>python aa.py
Name:a
Request:a
name:a a:No Info C:\Users\ChengXu1\Desktop>python aa.py
Name:aa
Request:s
name:aa s:No Info C:\Users\ChengXu1\Desktop>python aa.py
Name:Aaron
Request:phone
name:Aaron phone:888546 C:\Users\ChengXu1\Desktop>python aa.py
Name:Aaron
Request:23
name:Aaron 23:No Info

get方法可以在用户输入我们未准备的情况,也能做出合理反应。

示例五 has_key

has_key 在Python3.0中已不存在,作用和 k in dict 一样,检查字典中是否含有特定的键。

示例六 items 和 iteritems

items      以列表形式返回

iteritems 返回一个迭代器对象

people = {
'Alice':{
'phone':'',
'addr':'Address 1'
},
'Aaron':{
'phone':'',
'addr':'Address 2'
}
} print people.items()
iters = people.iteritems()
print iters
print list(iters)

运行结果

C:\Users\ChengXu1\Desktop>python aa.py
[('Aaron', {'phone': '', 'addr': 'Address 2'}), ('Alice', {'phone': '
', 'addr': 'Address 1'})]
<dictionary-itemiterator object at 0x00000000026E2C78>
[('Aaron', {'phone': '', 'addr': 'Address 2'}), ('Alice', {'phone': '
', 'addr': 'Address 1'})]

示例七 keys 和 iterkeys

keys           返回字典中的键以列表形式返回

iterkeys      返回针对键的迭代器

示例八 pop

pop            返回字典给定的键的值,并从字典中删除

>>> a = {'n':1111}
>>> a
{'n': 1111}
>>> a.pop('n')
1111
>>> a
{}

示例九 popitem

popitem方法 弹出一个随机项,并从字典删除该项,返回的该项是 以 键,值 元组形式

>>> a = {'n':1,'b':2}
>>> a.popitem()
('b', 2)

示例十 setdefault

setdefault  返回字典对应键值,如果不存在,返回默认值

>>> a = {'n':1111}
>>> print a.setdefault('n')
1111
>>> print a.setdefault('b','AA')
AA
>>> print a
{'b': 'AA', 'n': 1111}

示例十一 update

update 一个字典项更新另外一个字典

>>> a = {'b': 'AA', 'n': 1111}
>>> b = {'b':'cc'}
>>> a.update(b)
>>> a
{'b': 'cc', 'n': 1111}
>>> b = {'c':11}
>>> a.update(b)
>>> a
{'c': 11, 'b': 'cc', 'n': 1111}
>>>

提供的字典中的项会被添加到旧的字典中,若有相同的则会覆盖。

示例十二   values 和 itervalues

values            以列表的形式放回字典中的值

iterkeyvalues  返回字典中值的迭代器

Python 字典 (4) 持续更新的更多相关文章

  1. LeetCode python实现题解(持续更新)

    目录 LeetCode Python实现算法简介 0001 两数之和 0002 两数相加 0003 无重复字符的最长子串 0004 寻找两个有序数组的中位数 0005 最长回文子串 0006 Z字型变 ...

  2. LeetCode 题目的 Python 实现(持续更新中)

    Python-LeetCode 是一个使用 Python 语言解决 LeetCode 问题的代码库,库有以下几个方面需要注意: 所有题目都是 AC 的: 按照题目顺序,每 50 个放在一个目录下,方便 ...

  3. python笔记(持续更新)

    1.编译python遇到下面的编码问题:     SyntaxError: Non-ASCII character '\xe9' in file E:\projects\learn.py on lin ...

  4. python tips(持续更新中)

    python tips 可变对象与不可变对象 在python中,可变对象有数值类型(int,float),字符串(str),元组(tuple),可变对象有列表(list),字典(dict),集合(se ...

  5. python内置模块笔记(持续更新)

    常用函数name = '{wh}my \t name is {name},age is {age}.' print(name.capitalize()) # 字符串的开头字母大写 print(name ...

  6. Python 字符串 (3) 持续更新

    字符串操作 虽然字符串也是一种序列,但是它和元组一样,不可变的.当你想对它修改时,会引发异常.如 >>> strings = "Let's go">> ...

  7. python tips(持续更新)

    1. 引用上一层目录 import syssys.path.append('..')import xx 2. python json JSON是一种轻量级的数据交换格式.可以解决数据库中文存储问题,对 ...

  8. Python相关工具清单[持续更新]

    SublimeJEDI : awesome Python autocompletion with SublimeText. Awesome Python : A curated list of awe ...

  9. Python使用中错误(持续更新.....)

    1.在使用requests发送请求,响应数据转成json提示,没有可解码的json 解决办法: 这是由于,发送请求的数据,存在错误,响应出错比如404 400,所以找不到可以解码的json 示例如下: ...

随机推荐

  1. 最新 欢聚时代java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.欢聚时代等10家互联网公司的校招Offer,因为某些自身原因最终选择了欢聚时代.6.7月主要是做系统复习.项目复盘.Leet ...

  2. Bootstrap 控制台示例

    1.打开https://getbootstrap.com/docs/4.3/examples/ 2.选择Dashboard 3.右键查看源代码,另存为 4.通过源代码界面下载JS和CSS 5.修改绝对 ...

  3. php-fpm的参数优化

    查看php-fpm的内存占用 1.查看php-fpm的进程个数 ps -ef |grep "php-fpm"|grep "pool"|wc -l 2.查看每个p ...

  4. 【Cisco】实现同一个路由器一个端口用动态路由,另一个端口用静态路由

    一.先构建以下网络图: 准备三台路由器,三台交换机,三台主机,连接所有设备并配置端口IP和网关,DCE端口的时钟频率都设置为64000.

  5. 《MIT 6.828 Lab 1 Exercise 11》实验报告

    本实验的网站链接:MIT 6.828 Lab 1 Exercise 11. 题目 The above exercise should give you the information you need ...

  6. [转]mac升级Nodejs和Npm到最新版

    第一步,先查看本机node.js版本: node -v 第二步,清除node.js的cache: sudo npm cache clean -f 第三步,安装 n 工具,这个工具是专门用来管理node ...

  7. Java虚拟机内存管理小结

  8. 剑指offer16:输入两个单调递增的链表,合成后的链表满足单调不减规则。

    1 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 2 思路与方法 迭代法:两个链表中较小的头结点作为合并后头结点,之后依次合并两个链表中较小的 ...

  9. php商城秒杀活动

    今天在网上看到一篇思路+代码的商城秒杀实例,我觉得非常不错,借鉴一下分享给大家: 一.前言 双十一刚过不久,大家都知道在天猫.京东.苏宁等等电商网站上有很多秒杀活动,例如在某一个时刻抢购一个原价199 ...

  10. Windows编程 Windows程序的生与死(上)

    引子 “Windows 程序分为‘程序代码’和‘UI(User Interface)资源’两大部份,两部份最后以RC编译器(资源编译器)整合为一个完整的EXE 文件.所谓UI 资源是指功能菜单.对话框 ...