• 字典创建

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

>>> 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 -- 以列表的形式返回字典中的值,列表中可以包含重复的元素

《python基础教程》笔记之 字典的更多相关文章

  1. python基础教程笔记—即时标记(详解)

    最近一直在学习python,语法部分差不多看完了,想写一写python基础教程后面的第一个项目.因为我在网上看到的别人的博客讲解都并不是特别详细,仅仅是贴一下代码,书上内容照搬一下,对于当时刚学习py ...

  2. python基础教程笔记—画幅好画(详解)

    今天写一下基础教程里面的第二个项目,主要使用python来做一个pdf的图,比较简单. 首先我们需要安装用到的模块pip install reportlab即可. 书上是用urlopen从往上下了一个 ...

  3. Python基础教程笔记——第4章:字典

    字典 字典是Python唯一内建的数学映射类型,字典中的值没有特殊的顺序,键可以是数字,字符串,甚至是元组 字典的创建: 字典由键值对构成,字典中键是唯一的,而值不唯一.>>> a_ ...

  4. python基础教程笔记 第1单元 && 第2单元

    1.http://docs.python.org/dev/3.0/whatsnew/3.0.htmlpython-announce-listpython-help2.交互式编译器3.非整数除法 .1. ...

  5. Python基础教程笔记 第二章

    本章的名字虽然叫列表和元组,但是本章讲的最多的是列表,元祖指讲了很少的一部分.因为元组和列表很多方面都是一样的. 列表和元组的区别:列表可以被修改,元祖不可以被修改. python包含的6种内建序列: ...

  6. python基础教程总结3—字典

    1.字典 1.1 字典类型与序列类型的区别: 存取和访问数据的方式不同. 序列类型只用数字类型的键(从序列的开始按数值顺序索引): 映射类型可以用其他对象类型作键(如:数字.字符串.元祖,一般用字符串 ...

  7. Python基础教程笔记 第一章

    /  表示整除,当导入_future_模块中的version时,/ 表示正常的的除法, 此时可用//表示整除,不论数字是整型还是浮点型,都可以用//表示整除. ** 表示幂次方  例如 2**3    ...

  8. Python基础教程笔记——第7章:更加抽象(类)

    下面进入Python的面向对象: 对象的魔力: 多态:---可以对不同类的对象使用同样的操作 封装:---对外部隐藏对象内部的工作方式 继承:---以普通的类为基础建立专门的类对象 (1)多态: is ...

  9. Python基础教程笔记——第6章:抽象(函数)

    (1)计算裴波那契数列: fbis=[0,1] num=int(input("please input the number")) for i in range(num-2): f ...

  10. Python基础教程笔记——第5章:条件,循环和其他语句

    5.1 print和import的更多信息 1. print()3.0之后print不再是语句,而是函数, >>> print('udg',12,13)   udg 12 13 &g ...

随机推荐

  1. 【宽搜】Vijos P1051 送给圣诞夜的极光

    题目链接: https://vijos.org/p/1051 题目大意: 给一张‘-’和‘#’的图,规定曼哈顿距离小于等于2的‘#’属于同一图案,求图案数.[曼哈顿距离:对于A(x1,y1)和B(x2 ...

  2. 查看Wii的系统版本信息

    Wii的系统版本信息在系统设置界面就能看到: Step1:主界面 > Wii Options Step2:选择右边的Wii Settings Step3:如下图所示,当前主机的系统版本是4.2U ...

  3. bzoj 1056 [HAOI2008]排名系统(1862 [Zjoi2006]GameZ游戏排名系统)

    1056: [HAOI2008]排名系统 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1854  Solved: 502[Submit][Statu ...

  4. 使用Windows驱动的虚拟打印机,打印Excel表格无表格线问题解决(2)

    测试: 经前天的测试,最终还是没有明显的定夺到底是驱动的问题,还是打印机的问题.但是按照可能性来排查,最明显的一点就是其他测试环境不变的情况下增加一张图片,就可以打印出表格线,我始终觉得这里是突破点, ...

  5. SRM593(1-250pt,500pt)

    SRM 593 DIV1 250pt 题意:有如下图所示的平面,每个六边形有坐标.将其中一些六边形染色,要求有边相邻的两个六边形不能染同一种颜色.给定哪些六边形需要染色,问最少需要多少种颜色. 解法: ...

  6. puppet常用调试命令

    yum快速部署puppet测试环境(C/S端) rpm -ivh  http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm yum r ...

  7. java文件(文件夹)操作

    java中文件操作 判断是否为文件file.isFile()方法 判断是否为目录file.isDirectory()方法 判断是否存在file.exist()方法 创建新文件file.createNe ...

  8. 集群中几种session同步解决方案的比较

    1. 客户端cookie加密 .比较好的方法是自己采用cookie机制来实现一个session,在应用中使用此session实现. 问题:session中数据不能太多,最好只有个用户id. Sessi ...

  9. Android ProgressBar SeekBar

    1.ProgressBar 进度条 当水平进度条完成后,隐藏该进度条,并显示一张图片 常用属性: 1. android:max 设置进度条的最大值 2. android:progress 用于指定进度 ...

  10. Union和Union All的差别

    如果我们有一个表Student,包含下面字段与数据: drop table student; create table student ( id int primary key, name nvarc ...