字典一种用名字来引用值的数据结构,这种数据结构称为 映射(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. spring的控制器如何获取参数

    1.控制器代码 获取参数的注解 @RequestParam(name="name", required=false, defaultValue="World") ...

  2. js 数组扁平

    // 数组扁平和去重 var arr = [[1,2,2],[3,4,5,5],[6,7,7,9,[11,12,[12,13,[14]]]],10]; function hello (arr) { l ...

  3. 【转帖】Samba AD DC(域控制器)的配置

    Samba AD DC(域控制器)的配置 http://lihaitao.cn/?p=299 山东前辈写的blog 挺好的.. 改天做实验. 发表于2017年3月7日由李海涛 ■Samba AD DC ...

  4. SQL SERVER 使用游标删除所有主键

    Declare @Pk varChar(100);Declare @TBname varChar(100);declare cursor1 cursor for Select Sys2.name as ...

  5. 使用 Mybatis-plus 进行 crud 操作

    1 Mybatis-Plus简介 1.1 什么是Mybatis-Plus MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化 ...

  6. IDEA插件之FindBugs

    1.是个啥? Findbugs,它是一个静态分析工具,用来查找Java代码中的程序错误.它使用静态分析来识别Java程序中上百种不同类型的潜在错误. 2.安装 File -> Settings ...

  7. 剑指offer29:最小的k个数

    1 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 2 思路和方法,C++核心代码 2.1 sort()函数,ve ...

  8. Tomcat的架构

    Tomcat 7.0---Servlet API 3.0---JSP API 2.2---JDK 1.6 一个Tomcat实例,或者服务器(server),是Tomcat容器层次结构中的顶级组件. 只 ...

  9. SqlServer学习之存储过程

    前言:对于存储过程一直有一种抵触的心理,因为毕业至今所在的公司开发组都不是很规范,对于开发的一些注意事项并没有很多的规定,只是在知乎上查找相关知识的时候,看到很多人对于在程序里使用存储过程的不好之处都 ...

  10. [转载]Grid Search

    [转载]Grid Search 初学机器学习,之前的模型都是手动调参的,效果一般.同学和我说他用了一个叫grid search的方法.可以实现自动调参,顿时感觉非常高级.吃饭的时候想调参的话最差不过也 ...