字典一种用名字来引用值的数据结构,这种数据结构称为 映射(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. Django之session详解

    好文章来自追风的小蚂蚁:https://www.cnblogs.com/zhuifeng-mayi/p/9099811.html cookie:Cookie,有时也用其复数形式 Cookies,指某些 ...

  2. golang的定时器NewTimer、NewTicker使用

    package main import ( "fmt" "sync" "time" ) /** *ticker只要定义完成,从此刻开始计时, ...

  3. Rocketmq-简单部署

    一.准备环境 1.系统:Centos7.3(无硬性要求) 2. jdk:1.8 3.maven:3.5(无硬性要求) 4.git 5.rocketmq 4.2 二.环境部署 1.jdk1.8以及mav ...

  4. java知识随笔整理-标量函数和表值函数

    以sql server为例: 1.表值函数 用户定义表值函数返回 table 数据类型,表是单个 SELECT 语句的结果集. 示例代码CREATE FUNCTION Test_GetEmployee ...

  5. java中package包

    一个.java文件内部有一个.而且只能有一个public类,类名必须与文件名完全一致. 在一个.java文件的开头使用package关键字,作用是指出这个编译单元属于该package的一个库的一部分. ...

  6. HDU 3642 求体积交集

    Get The Treasury 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3642 Problem Description Jack knows ...

  7. RabbitMQ快速开始

    ①:安装rabbitmq所需要的依赖包 yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make g ...

  8. 核发电站 (dp前缀优化)

    大意: $n$个城市, $m$种核电站, 第$i$种假设要建在第$x$个城市, 必须满足$[x-i,x+i]$范围内无其他核电站, 求建核电站的方案数. 简单$dp$题, 设$dp[i][j]$为位置 ...

  9. 牛客 216 C 小K的疑惑

    大意: 给定树, 求多少个三元组(i,j,k), 满足dis(i,j)=dis(j,k)=dis(k,i). 刚开始想复杂了, 暴力统计了所有的情况. #include <iostream> ...

  10. WP8的新功能-通过一个程序来启动另一个程序

    Wp8对原来的WP7做了大量的优化...其中一个就包括Protocol Association,也就是通过uri来打开另外一个程序,这也就是说,我们可以做一个程序来启动另外一个程序了,如微信,QQ之类 ...