第四章 字典:当索引不好用时

4.1 字典的使用

字典的适用场景:

表示一个游戏棋盘的状态,每个键都是由坐标值组成的元组;

存储文件修改时间,用文件名作为键;

数字电话/地址簿

4.2 创建和使用字典

如下的“键-值”对就是字典

>>> phonebook = {'alice':'2341', 'beth':'9876'}
>>> phonebook['alice']
'2341'

4.2.1 dict函数

可以用dict函数,通过其他映射或键-值对的序列建立字典。

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

也可以通过关键字参数来创建字典:

>>> d = dict(name='gumby', age = 42)
>>> d
{'name': 'gumby', 'age': 42}

4.2.2 基本字典操作

>>> len(d)           // 字典长度
2
>>> d["name"]     // 取得键对应的值
'gumby'
>>> d["name"] = "aaaa"  // 赋值
>>> d
{'name': 'aaaa', 'age': 42}
>>> del d["name"]         // 删除
>>> d
{'age': 42}
>>> "name" in d           // 检查键是否在字典中
False

键类型:字典的键不一定为整型数据,可以是任意的不可变类型,比如浮点数,字符串或者元组。

自动添加:即使键起初不在字典中,也可以为他赋值,这样字典就会建立新项。

>>> x = []                              //  不合法,因为这是一个列表
>>> x[42] = 5
Traceback (most recent call last):
File "<pyshell#147>", line 1, in <module>
x[42] = 5
IndexError: list assignment index out of range

>>> x = {}                               // 合法,这是一个映射
>>> x[42] = "fsd"
>>> x
{42: 'fsd'}

注意:   ( )  -   元组

[ ]   -   序列

         { }   -  字典

4.2.3 字典的格式化字符串

>>> var = {"beth":'9102', "cecil":'3258'}
>>> "%(cecil)s" % var            // 可以用键
'3258'

4.2.4 字典的方法

 1)clear

清楚字典的所有项,原地操作,无返回值

>>> var
{'beth': '9102', 'cecil': '3258'}
>>> var.clear()
>>> var
{}            // 空字典

 2)copy  返回相同键-值对的新字典(这个方法是浅复制)

>>> x = {'username':'admin','machines':['foo','bar','baz']}
>>> x
{'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
>>> y = x.copy()
>>> y['username'] ='newname'              // 替换某个值,原始字典不受影响
>>> y['machines'].remove('bar')            // 如果修改了某个值(原地修改,而不是替换),原始字典也会改变,
>>> y
{'username': 'newname', 'machines': ['foo', 'baz']}   
>>> x
{'username': 'admin', 'machines': ['foo', 'baz']}

避免上述浅复制问题的方案是,使用深复制deepcopy

 3)fromkeys:用给定的键建立新字典,每个键对应的值是NONE

>>> {}.fromkeys(['name','age'])
{'name': None, 'age': None}

>>> dict.fromkeys(['name','age'],'(unknown)')         
{'name': '(unknown)', 'age': '(unknown)'}

 4)get

>>> d = {}
>>> d["anem"]             // 这种方式访问不存在的键会抛出异常
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
d["anem"]
KeyError: 'anem'
>>> d.get("fsd")         // get不会抛出异常,当访问不存在的键的时候
>>>

 5) has_key : python 3不支持

 6) items 和iteritems

 7) keys和iterkeys

 8)pop:  得到给定的键的值,并删除

>>> d
{'anme': 'fds'}
>>> d.pop('anme')
'fds'
>>> d
{}

 9) popitem:弹出随机的项(用于一个一个移除并处理)

10) setdefault: 如果键存在,返回对应的值;如果不存在,则返默认值并更新。

>>> d
{}
>>> d.setdefault('name',"jj")
'jj'
>>> d
{'name': 'jj'}

11) update:  利用一个字典项更新另外一个字典。 提供的项会被添加到旧的字典中,如果键存在,就覆盖。

python学习(四) 字典:当索引不好用时的更多相关文章

  1. 字典:当索引不好用时2 - 零基础入门学习Python026

    字典:当索引不好用时2 让编程改变世界 Change the world by program 上节课我们学习到在一些情况下,比序列更实用的映射类型:字典.我们知道字典也有个关键符号就是大括号(也叫花 ...

  2. 字典:当索引不好用时 - 零基础入门学习Python025

    字典:当索引不好用时 让编程改变世界 Change the world by program 有天你想翻开牛津字典,查找"sadomasochism[ˌseɪdoʊ'mæsəkɪzəm]&q ...

  3. 【python学习笔记】4.字典:当索引不好用时

    [python学习笔记]4.字典:当索引不好用时 字典是python中唯一内建的map类型 创建: key可以为任何不可改变的类型,包括内置类型,或者元组,字符串 通过大括号: phonebook={ ...

  4. 零基础入门学习Python(25)--字典:当索引不好用时

    知识点 字典属于映射类型. 列表,元祖,字符串等属于序列类型 创建及访问字典 #创建一个字典 >>> dict1 = {'李宁':'一切皆有可能','耐克':'Just do it' ...

  5. 零基础入门学习Python(26)--字典:当索引不好用时2

    知识点 删除字典元素 能删单一的元素也能清空字典,清空只需一项操作. 显示删除一个字典用del命令,如下: >>> dict1 = {'a':1,'b':2,'c':3} >& ...

  6. python学习笔记之三:字典,当索引不好用时

    字典是python中唯一内建的映射类型.字典中的值并没有特殊的顺序,但是都存储在一个特定的键(key)里.键可以是数字,字符串甚至是元组. 1. 创建和使用字典 字典可以通过下面的方式创建: phon ...

  7. Python—字典(当索引不好用时)

    一.定义与概念 1.字典是针对非序列集合而提供的一种数据类型 举例:检索学生信息. “<键><值>对”. 键(即身份证号码) 值(即学生信息). “键值对”例子 姓名和电话号码 ...

  8. Python基础--字典:当索引不好用时

    当列表或是元组的索引不能达到我们的目的时,我们想到了还有一种序列,即字典. 创建 字典 由多个键以及相应的值构成的键-值对组成. 键唯一.值能够不唯一 phonebook = {'xidada':'1 ...

  9. Python学习07——字典(2)

    笨办法学Python第40节,上次用的第三版的书,这次是第四版的书. 这一节的代码如下: cities = {'CA':'San Francisco', 'MI':'Detroit', 'FL':'J ...

随机推荐

  1. Ajax编程(HTTP请求与响应及API)详解

    AJAX编程 即 Asynchronous [e'sɪŋkrənəs] Javascript And XML, AJAX 不是一门的新的语言,而是对现有技术的综合利用. 本质是在HTTP协议的基础上以 ...

  2. linux的find命令详解

    find命令是用来在给定的目录下查找符合给定条件的文件 find [OPTIONS] [查找起始路径] [查找条件] [处理动作]   一.OPTIONS参数 -P.-L.-H:控制软连接的对待方式, ...

  3. 【spark】分区

    RDD是弹性分布式数据集,通常RDD很大,会被分成多个分区,保存在不同节点上. 那么分区有什么好处呢? 分区能减少节点之间的通信开销,正确的分区能大大加快程序的执行速度. 我们看个例子 首先我们要了解 ...

  4. Java基础学习-抽象类

    package abstractclass; /* * 抽象类的概述: * 1.抽象类用abstract来修饰方法或者类 * 2.没有具体的方法体的方法便是抽象方法. */ class CF{ pub ...

  5. 关于HashMap,HashTable,HashSet浅析

    首先,最重要的,HashMap  作为一个我们使用非常多的集合.最常被大家认知的是,它是一个key-value形式存储数据的数据结构,可以实现快速的存,取操作.  关于HashMap的源码,我们截取一 ...

  6. eclipse mars4.5安装hibernate开发环境

    在安装hibernate插件过程中遇到下面前三张图片所示的现象是没关系的,只要最后能看到第四张图的结果就说明安装成功,我一开始不知道走了好多弯路.我用的eclipse mars4.5,采用了在线安装的 ...

  7. 小晚wan的公众号

    转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/70932630 本文出自[我是干勾鱼的博客] 小晚wan的公众号还是挺深刻的,有时 ...

  8. Java 实现--时间片轮转 RR 进程调度算法

    时间片轮转(Round-Robin)调度算法是操作系统一种比较公平的进程调度的方式,这种方式使得就绪队列上的所有进程在每次轮转时都可以运行相同的一个时间片. 基本原理 算法实现原理是,按进程到达顺序( ...

  9. SVN客户端与服务器端搭建操作

    一.客户端的安装 1.点击安装程序 2.修改svn安装位置 3.开始安装 4.客户端安装成功 5.回到左面  右键出现svn检出 tortoiSVN  表示安装成功 Myeclipse svn插件安装 ...

  10. web应用程序安全攻防---sql注入和xss跨站脚本攻击

    kali视频学习请看 http://www.cnblogs.com/lidong20179210/p/8909569.html 博文主要内容包括两种常见的web攻击 sql注入 XSS跨站脚本攻击 代 ...