#字典:当索引不好用时
1.字典 类似于php的关联数组 列表类似于索引数组

2.创建字典
phonebook={'alice':'2100','tom':'1900'}
键值之间用: 项之间用,
空字典{}

字典函数
dict 通过映射将键值序列对建立字典
>>> item=[('name','Gumby'),('age',42)]
>>> d=dict(item)
>>> d
{'age': 42, 'name': 'Gumby'}
>>> d['name']
'Gumby'

dict也可以通过关键字参数来创建字典
>>> d=dict(name='Gumby',age=42)
>>> d
{'age': 42, 'name': 'Gumby'}
dict如果不带参数 则返回空字典

基本字典操作
len(d)返回d中项(键-值对)的数量
d[k]返回关联到键K上的值
d[k]=v将值关联到键k上
del d[k]删除键为k的项
k in d检查d中是否含有键为k的项
字典和列表的特性
键类型:字典的键不一定为整型数据
自动添加:字典中不存在的项 也可以直接赋值
成员资格:k in d查找的是键而不是值 查成员资格字典比列表更加高效

字典的格式化字符串
>>> phonebook={'alice':'2100','tom':'1900'}
>>> phonebook
{'alice': '2100', 'tom': '1900'}
>>> "alice's phone is %(alice)s."%phonebook
"alice's phone is 2100."
可以根据键提取任意一个值 模板里面用的特别多

3.字典方法
(1)clear 清除字典中所有的项
(2)copy 返回一个具有相同键值对的新字典
浅复制 键本身是相同的 不是副本
>>> x={'name':'admin','machine':['foo','bar','baz']}
>>> y=x.copy()
>>> y['name']='ml'
>>> y['machine'].remove('bar')
>>> y
{'machine': ['foo', 'baz'], 'name': 'ml'}
>>> x
{'machine': ['foo', 'baz'], 'name': 'admin'}
#如果修改的话 原字典会保留原来的值 但是如果删除某个项 原字典也会删除

如果想避免浅复制带来的后果 那就最好使用深复制(deep copy) 复制其包含所有的值
>>> from copy import deepcopy
>>> d={}
>>> d['names']=['after','before']
>>> c=d.copy()
>>> dc=deepcopy(d)
>>> d['names'].append('cleari')
>>> c
{'names': ['after', 'before', 'cleari']}
>>> dc
{'names': ['after', 'before']}
(3)fromkeys方法使用给定的键建立新的字典 每个键默认对应的值为None
>>> {}.fromkeys(['name','age'])
{'age': None, 'name': None}
也可以这样
>>> dict.fromkeys(['name','key'])
{'name': None, 'key': None}
如果不想使用None作为默认值 也可以自己指定
>>> dict.fromkeys(['name','age'],'(unknown)')
{'age': '(unknown)', 'name': '(unknown)'}

(4)get更宽松的访问字典项的方法 访问不存在的项不会出错 返回None
>>> d={}
>>> d['name']

Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
d['name']
KeyError: 'name'
>>> d.get('name')
>>> print d.get('name')
None
如果为None 可以指定默认值为其他值
>>> print d.get('name','mo')
mo
如果键存在 就像普通的字典查询一样
>>> d['name']='eric'
>>> d.get('name')
'eric'

(5)has_key 检查字典中是否含有给出的键
相当于k in d
d.has_key('name')

(6)items和iteritems
item方法将所有的字典以列表的方式返回
每一项都来自于键值 项在返回时没有特殊的顺序
>>> d={'name':'eang','age':'19'}
>>> d.items()
[('age', '19'), ('name', 'eang')]
iteritems方法作用大致相同 但是会返回一个迭代器对象而不是列表
>>> it=d.iteritems()
>>> it
<dictionary-itemiterator object at 0x02B213F0>
>>> list(it)
[('age', '19'), ('name', 'eang')]
(7)keys和iterkeys
keys方法将字典中的键以列表形式返回 而iterkeys则返回针对键的迭代器
(8)pop方法用来获得对应于给定键的值 然后将这个键值对从字典中移除
>>> d={'x':1,'y':2}
>>> d.pop('x')
1
>>> d
{'y': 2}
(9)popitem
类似于list.pop list.pop会弹出列表的最后一个元素 popitem弹出随机项
>>> d={'x':'1','y':'2'}
>>> d
{'y': '2', 'x': '1'}
>>> d.popitem()
('y', '2')
>>> d.popitem()
('x', '1')
>>> d.popitem()
(10)setdefault
setdefault方法在某种程度上类似于get方法,可获得与给定键相关联的值
setdefault 还能在字典中不含有给定键的情况下设定相应的键值
>>> d={}
>>> d.setdefault('name','n/a')
'n/a'
>>> d
{'name': 'n/a'}
>>> d['name']='tom'
>>> d.setdefault('name','n/a')
'tom'
>>> d
{'name': 'tom'}

>>> d={}
>>> print d.setdefault('name')
None
>>> d
{'name': None}

(11)update
update方法可以利用一个字典项更新另外一个字典
>>> d={'name':'tom','age':'33'}
>>> x={'height':'170'}
>>> d.update(x)
>>> d
{'age': '33', 'name': 'tom', 'height': '170'}
(12)values 和itervalues
values方法以列表的形式返回字典中的值(itervalues返回值的迭代器)与返回键的列表不同的是 返回值得列表可以包含重复的元素
>>> d={}
>>> d[1]=1
>>> d[2]=2
>>> d[3]=3
>>> d.values()
[1, 2, 3]

python之字典 2014-4-5的更多相关文章

  1. Python中字典和集合

    Python中字典和集合 映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元 ...

  2. Python的字典

    1.  Python的字典 1.1.  字典的定义 在Python中,字典是一种key-value的数据类型,也是唯一的映射类型:字典还是另一种可变容器类型,且可存储任意类型对象,其中也可包括其他容器 ...

  3. Python的字典和JSON

    Python的字典和JSON在表现形式上非常相似 #这是Python中的一个字典 dic = { 'str': 'this is a string', 'list': [1, 2, 'a', 'b'] ...

  4. python基础--字典

    Python基础--字典 字典的常用函数: dict.clear( )--->无任何返回值 说明: 清除字典内的所有的元素 语法: In [5]: dict.clear? Type: metho ...

  5. Python dictionary 字典 常用法

    Python dictionary 字典 常用法 d = {} d.has_key(key_in)       # if has the key of key_in d.keys()          ...

  6. python有序字典OrderedDict()

    转python创建有序字典OrderedDict # -*- coding:utf-8 -*- """ python有序字典 需导入模块collections " ...

  7. python:字典嵌套列表

    Python的字典{ }以键值对的形式保存数据,可以以键来访问字典中保存的值而不能用下标访问.字典中几乎可以包含任意的变量,字典,数列,元组.数列也一样. python的列表[ ]与字典不同,列表通过 ...

  8. Python的字典类型

    Python的字典类型为dict,用{}来表示,字典存放键值对数据,每个键值对用:号分隔,每个键值对之间用,号分隔,其基本格式如下: d = {key1 : value1, key2 : value2 ...

  9. python基础—字典

    阅读文本需要3分钟,不建议跳读 节目清单 字典是python中最重要的数据类型,字典由“键-值”对组成的集合,字典中的“值”通过“键”来引用.这里将介绍字典的定义.访问.排序等功能. 字典的创建 字典 ...

  10. 深入Python(1): 字典排序 关于sort()、reversed()、sorted()

    http://www.cnblogs.com/BeginMan/p/3193081.html 一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠 ...

随机推荐

  1. Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)_python

    我们可以利用urllib来抓取远程的数据进行保存哦,以下是python3 抓取网页资源的多种方法,有需要的可以参考借鉴. 1.最简单 import urllib.request response = ...

  2. [ZPG TEST 111] 奶牛的新家【DP】

    3.奶牛的新家 [问题描述] 由于奶牛们纷纷表示破旧的房子实在是太丑陋了,DD决定给他们建造新家.现在有许多奶牛决定将家建造在n*m的城市中.然而奶牛们分成了k帮派,不同帮派的奶牛不能住在同列或同行上 ...

  3. java数组实现红包的方法

    package Hongbao; import java.text.DecimalFormat; import java.util.Scanner; public class Hongbao { pu ...

  4. 转】用Nodejs连接MySQL

    原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/2/ 感谢! 用Nodejs连接MySQL 从零开始node ...

  5. @ComponentScan、@EnableFeignClients和@MapperScan注解笔记

    @ComponentScan:此注解是用来管理容器中的bean,即是管理项目中类的依赖关系, 注意此注解并不创建类的实例: 默认情况下此注解扫描本工程下的所有包,                    ...

  6. PHP(二)常用函数

    数学函数 数组函数 字符串函数

  7. (Android MVVM)使用Data Binding Library(1)

    Data Binding Library 用官方提供的Data Binding Library,可以最大限度的减少findViewById(),setOnClickListener()之类的胶水代码, ...

  8. 【ARM开发板】迅为IMX6开发板QT下LVDS和HDMI双屏异显

    本文转自迅为论坛:http://www.topeetboard.com 平台:迅为-IMX6开发板 首先开发板分别连接9.7寸屏和HDMI显示器,然后使用MfgTool工具烧写QT系统,然后拨码开关设 ...

  9. 迅为iMX6开发板支持单核,双核,四核处理器,为客户产品选择提供灵活性

    本文转自迅为:http://topeetboard.com 店铺:https://arm-board.taobao.com 处理器:Freescale Cortex-A9 四核 i.MX6Q 主频 1 ...

  10. HDU_3792_(素数筛+树状数组)

    Twin Prime Conjecture Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...