• 字典创建

字典由多个键值对组成,每个键和对应值之间用冒号隔开,项之间用逗号隔开,而整个字典用一对大括号括起来,如

>>> phonebook={'alice':'0123', 'Betch':'4567', 'Cecil':'7854'}
>>> phonebook
{'Betch': '4567', 'alice': '0123', 'Cecil': '7854'}

dict -- 通过其他映射、(键,值)这样的序列对或者关键字建立字典,如

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

  • 基本操作

len(d) -- 返回d中项(键值对)的数量

d[k] -- 返回关联到键k上的值

d[k] = v -- 将值v关联到键k上

del d[k] -- 删除键为k的项

k in d -- 检查d中是否含有键为k的项

字典与列表区别,如下

键类型: 字典的键可以为任何不可变类型

自动添加:即是那个键起初在字典中并不存在,也可以为它分配一个值

>>> x = {}
>>> x[42] = 'f'
>>> x
{42: 'f'}

成员资格:k in d查找的是键

#简单数据库
#使用人名作为键的字典。每个人用另一个字典来表示,其键’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('key(p/a):')
#使用正确的键:
if request == 'p':key = 'phone'
if request == 'a':ker = 'addr'
#如果名字是字典中的有效键才打印信息
if name in people : print "%s's %s is %s." %\
(name, labels[key], people[name][key])

结果

Name:Beth
key(p/a):p
Beth's phone number is 9102.

  • 字典格式化字符串

只以字符串作为键的字典来格式化字符串,如

>>> phonebook={'alice':'0123', 'Betch':'4567', 'Cecil':'7854'}
>>> "alice's phnoe is %(alice)s." % phonebook
"alice's phnoe is 0123."

  • 字典方法

clear -- 清楚字典中所有的项,直接作用在原字典上

copy -- 返回一个具有相同键值对的薪资点,浅拷贝

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

deecopy -- 深拷贝

fromkeys -- 使用给定的键建立新的字典,每个键默认对应的值为None,或者自己提供默认值

>>> x = dict.fromkeys(['name', 'age'], 'un')
>>> x
{'age': 'un', 'name': 'un'}

get -- 访问字典,访问一个不存在的键时,返回None,或者自定义默认返回值

>>> x.get('it', 'n/a')
'n/a'

#使用get()的简单数据库

people={
'Alice':{
'phone':'',
'addr':'Foo drive 23'
},
'Beth':{
'phone':'',
'addr':'Bar Street 42'
},
'Cecil':{
'phone':'',
'addr':'Baz avenue 90'
}
}
#针对电话号码和地址使用的描述性标签,会在打印输出的时候用到
labels={
'phone':'phone number',
'addr':'address'
}
name=raw_input('Name:')
#查找电话号码还是地址?
request=raw_input('key(p/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
key(p/a):a
Beth's address is Bar Street 42.

has_key -- 检查字典中是否含有给出的键

items -- 将所有的字典项以列表方式返回,这些列表项中的每一项都来自(键,值)

iteritems -- 返回迭代器

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

iterkeys -- 返回针对键的迭代器

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

popitem -- 弹出随机的项

setdefault -- 获得与给定键相关联的值,在字典中不含有给定键的情况下设定相应的键值

>>> x={'username':'admin','machines':['foo','bar']}
>>> x.pop('username')
'admin'
>>> x={'username':'admin','machines':['foo','bar']}
>>> x.setdefault('hh', 'n/a')
'n/a'
>>> x
{'username': 'admin', 'hh': 'n/a', 'machines': ['foo', 'bar']}
>>> x['hh'] = 'hh'
>>> x.setdefault('hh', 'n/a')
'hh'
>>> x
{'username': 'admin', 'hh': 'hh', 'machines': ['foo', 'bar']}

update -- 利用一个字典项更新另外一个字典项,提供的字典的项会被添加到旧的字典中,若有相同的键则会进行覆盖

>>> x={'username':'admin','machines':['foo','bar']}
>>> y={'hh':'haha'}
>>> x.update(y)
>>> x
{'username': 'admin', 'hh': 'haha', 'machines': ['foo', 'bar']}

values -- 以列表的形式返回字典中的值,列表中可以包含重复的元素

最新文章

  1. jquery mobile
  2. [moka同学笔记]php 获取时间(今天,昨天,三天内,本周,上周,本月,三年内,半年内,一年内,三年内)
  3. 数组去重及数组的prototype原型
  4. Bad apple for CSharp
  5. 遇到 Error creating the Web Proxy specified in the 'system.net/defaultProxy' configuration section的解决办法
  6. win7 mount到Linux下无法分配内存的问题(Cannot allocate memory)
  7. 门户级UGC系统的技术进化路线——新浪新闻评论系统的架构演进和经验总结(转)
  8. phpcms v9和discuz X3.1实现同步登陆退出论坛(已实现)
  9. MQ 2035(MQRC_NOT_AUTHORIZED)
  10. NoteExpress格式化复制指定输出样式
  11. 代理模式与Android
  12. jQuery(一)
  13. python3 stack/ queue和deque模块
  14. vue-cli中webpack配置详解
  15. Redis入门的简单使用
  16. Column 'parent_id' specified twice
  17. M1/M2阶段总结
  18. 14. js字符串截取substring用法
  19. URAL1099. Work Scheduling(一般图匹配带花树开花算法)
  20. Linux在终端和控制台下复制粘贴命令快捷键

热门文章

  1. FFT多项式乘法加速
  2. 2015第35周五JavaScript变量
  3. datagridview的数据源的操作
  4. web references是在.NET下的一个东东?它有什么用呢?和“引用”有什么区别!
  5. 源代码管理工具TFS2013安装与使用
  6. Shell遍历文件,对每行进行正则匹配
  7. Android 6.0 反射 newInstance
  8. 利用MyEclipse的ant插件生成Hibernate的映射文件
  9. Java编程 的动态性,第 2部分: 引入反射--转载
  10. 常用git命令整理