在Python中通过名字来引用值的数据结构称为映射(mapping)。字典是Python中唯一内建(Python解释器本身支持,不需要import)的映射类型。字典中的值没有特殊的顺序,都存储在一个特定的键(key)下。键可以是数字,字符串,甚至是元组。
 
创建字典

        phonebook = {'Tom':'1234','Lily':'4567'}
        字典由两个大括号{}组成,空字典就可以这样表示{}。每个键和它的值之间用冒号 ':' 隔开。键可以是任意的不可变类型。项之间用逗号 ',' 隔开。也可以使用dict()函数来创建字典
        字典中的键是唯一的,而值不唯一。如果存在键名一样的项,后面的值会覆盖前面的。
>>> a = {1:2,1:3,1:4,2:2}
>>> a
{1: 4, 2: 2} 
 
基本字典操作

1.len(d)
        返回字典d中项(键-值)的数目。
2.d[k]
        返回关联到键k上的值。
3.d[k] = v
        将值v关联到键k上。如果k不存在,就会建立新的项
4.del d[k]
        删除键为k的项
5.k in d
        检查字典d中是否含有键为k的项。
 
字典的格式化字符串

>>> phonebook={'Lily': '2345', 'Tom': '1234’}
>>> "Tom's phone number is %(Tom)s." % phonebook
"Tom's phone number is 1234."
        在每个转换说明符中的%字符后面,可以加上键(用圆括号括起来),后面再跟上其它说明元素。
 
字典方法

方法 例子 说明
dict.clear()
>>> phonebook
{'Lily': '2345', 'Tom': '1234'}
>>> phonebook.clear()
>>> phonebook
{}
清除字典中所有的项,无返回值(或者说返回None)。这是个原地操作,即直接操作原始字典。
dict.copy()
>>> x = {'a':1,'b':2,'c':3}
>>> y = x.copy()
>>> y['c']=100
>>> y
{'a': 1, 'c': 100, 'b': 2}
>>> x
{'a': 1, 'c': 3, 'b': 2}
返回一个具有相同键-值对的新字典。
但是这个方法是浅复制。当在副本中替换值(例子中的重新赋值)的时候,原始字典不受影响。但是如果是修改某个值(不是替换,是修改,比如删除之类),原始字典也会改变。
deepcopy(dict)   这个是深复制,区别于copy。得到新的副本后,修改不会影响原始字典。
dict.fromkeys()
>>> dict.fromkeys(['ef','gh'])
{'ef': None, 'gh': None}
使用给定的键建立新的字典,每个键都对应一个默认的值None。
返回新的序列。
可以{}.fromkeys(...)或者dict.fromkeys(....)
dict.get()
>>> x
{'ab': '1', 'cd': '2'}
>>> x.get('cd')
'2'
>>> x.get('aa')
>>> print x.get('aa')
None
>>> x.get('aa','N/A')
'N/A'
访问字典项的方法,如果不存在,返回None。也可以自己定义找不到的时候返回值。
dict.has_key()
>>> x
{'ab': '1', 'cd': '2'}
>>> x.has_key('ab')
True
>>> x.has_key('ax')
False
检查字典中是否含有特定的键。
这个表达式相当于k in d
dict.items()
>>> x
{'ab': '1', 'cd': '2'}
>>> x.items()
[('ab', '1'), ('cd', '2')]
将字典的所有项以列表方式返回,列表中每一项表示为(键,值)对的形式,但是返回没有特别的次序。
dict.iteritems()
>>> x
{'ab': '1', 'cd': '2'}
>>> it = x.iteritems()
>>> list(it)
[('ab', '1'), ('cd', '2')]
类似ltems的作用,但是返回的是迭代器
dict.keys()
>>> x
{'ab': '1', 'cd': '2'}
>>> x.keys()
['ab', 'cd']
将字典的键以列表的方式返回
dict.pop()
>>> x
{'ab': '1', 'cd': '2'}
>>> x.pop('ab')
'1'
>>> x
{'cd': '2'}
获得对应于给定键的值,然后将这个键-值对从字典中移除。
dict.popitem()
>>> x
{'gh': '3', 'ab': '1', 'cd': '2'}
>>> x.popitem()
('gh', '3')
>>> x
{'ab': '1', 'cd': '2'}
作用类似pop,只是弹出列表中随机的项。
dict.setdefault
>>> x
{'ab': '1', 'cd': '2'}
>>> print x.setdefault('gh')
None
>>> x
{'gh': None, 'ab': '1', 'cd': '2'}
>>> print x.setdefault('ij','N/A')
N/A
>>> x
{'gh': None, 'ab': '1', 'ij': 'N/A', 'cd': '2'}
>>> x.setdefault('ab')
'1'
某种程度上类似于get方法。
当键不存在的时候,setdefault返回默认值并且相应的更新字典,默认值是可以选的,也可以自己设定值。。如果键存在,那么就返回与其对应的值,但不改变字典。
dict.update()
>>> y
{'mm': 'haha', 'cd': 'kk'}
>>> x
{'gh': None, 'ab': '1', 'ij': 'N/A', 'cd': '2'}
>>> x.update(y)
>>> x
{'ab': '1', 'mm': 'haha', 'cd': 'kk', 'ij': 'N/A', 'gh': None}
利用好一个字典项来更新另外一个字典。提供的字典中的项会被添加到旧的字典中,若有相同的键会进行覆盖
d.values()
>>> x
{'ab': '1', 'mm': 'haha', 'cd': 'kk', 'ij': 'N/A', 'gh': None}
>>> x.values()
['1', 'haha', 'kk', 'N/A', None]
以列表的方式返回字典中的值,返回值的列表中可以包含重复的元素。
 
        clear的特别说明:所谓的直接操作原始字典可以从下面两个例子对比来看
例子1:
>>> x={}
>>> y=x
>>> x['key']='value'
>>> y
{'key': 'value'}
>>> x={}
>>> y
{'key': 'value'}
例子2:
>>> x={}
>>> y=x
>>> x['key']='value'
>>> y
{'key': 'value'}
>>> x.clear()
>>> y
{}
        从上面的两个例子来看,x,y最初都对应同一个字典,例子1中通过将x重新关联到一个新的空字典来达到清空的目的,对y没有影响。但是例子2里,通过clear方法来清空原始数据里的元素,就会影响到y。

Python学习--字典的更多相关文章

  1. python学习——字典和集合

    一.字典 1)字典介绍 字典是一种通过名字或者关键字引用的得数据结构,其键可以是数字.字符串.元组,这种不可变的结构类型也称之为映射.字典类型是Python中唯一內建的映射类型. 1)字典操作 &qu ...

  2. Python学习字典.基础三

    元组   Python的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组中要定义的元组中只有一个元素需要再元素后面加逗号,用来消除数学歧义.例 t=(1,)   ...

  3. Python学习——字典

    字典 字典是另一种可变容器模型,且可存储任意类型对象. 1.创建字典 字典由键和对应值成对组成.每个键与值之间用:隔开,每对之间逗号隔开. 每个键应当互不相同,值可以相同.若同时出现两个相同的键,则后 ...

  4. Python学习————字典的增删改查

    增加:dic1['KEY'] = value -->若之前有KEY,则会覆盖.若没有KEY,则新增至尾处dic.setdefault('KEY',value/None) --->若之前有K ...

  5. Python学习-字典练习:简单通讯录

    功能要求: 查询联系人,输入姓名,可以查询当前通讯录里面的联系人信息,若联系人存在,则输出联系人信息,若不存在,则告知 插入联系人,可以向通讯录中新建联系人,若联系人已经存在,则询问是否修改联系人信息 ...

  6. Python学习基础笔记(全)

    换博客了,还是csdn好一些. Python学习基础笔记 1.Python学习-linux下Python3的安装 2.Python学习-数据类型.运算符.条件语句 3.Python学习-循环语句 4. ...

  7. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  8. python学习笔记(一)元组,序列,字典

    python学习笔记(一)元组,序列,字典

  9. Python学习笔记——基础篇2【第三周】——计数器、有序字典、元组、单(双)向队列、深浅拷贝、函数、装饰器

    目录 1.Python计数器Counter 2.Python有序字典OrderredDict 3.Python默认字典default 4.python可命名元组namedtuple 5.Python双 ...

随机推荐

  1. 【京东个人中心】——Nodejs/Ajax/HTML5/Mysql爬坑之注册与登录监听

    一.引言 在数据库和静态页面都创建好之后,下面就该接着完成后台Node.js监听注册和登录的部分了.这个部分主要使用的技术是:Node.js的Express框架和ajax异步请求.登录和注册的代码实现 ...

  2. ZOJ2286 Sum of Divisors 筛选式打表

    我想我是和Segmentation Fault有仇,我一直以为是空间开大的问题,然后一直减少空间,还是SF,谁让n没有给范围了,qwq. 教训:以后注意输入范围和开的空间大小. #include< ...

  3. Laravel框架使用查询构造器实现CURD

    一.什么是查询构造器? ①Laravel 查询构造器(query Builder)提供方便,流畅的接口,用来建立及执行数据库查找语法 ②使用PDO参数绑定,以保护应用程序免于SQL注入因此传入的参数不 ...

  4. ConcurrentHashMap源码及分析

    ConcurrentHashMap是在jdk1.5版本开始,存在于java.util.concurrent包下.本文主要是针对jdk1.7版本. 由于HashMap是非线程安全的,HashTable虽 ...

  5. c#中字节数组byte[]、图片image、流stream,字符串string、内存流MemoryStream、文件file,之间的转换

    字节数组byte[]与图片image之间的转化 字节数组转换成图片 public static Image byte2img(byte[] buffer) { MemoryStream ms = ne ...

  6. 正六边形网格化(Hexagonal Grids)原理与实现

    在路径规划.游戏设计栅格法应用中,正六边形网格不如矩形网格直接和常见,但是正六边形具有自身的应用特点,更适用于一些特殊场景中,比如旷阔的海洋.区域或者太空.本文主要讲述如何对正六边形进行几何学分析.网 ...

  7. 安利一波那个叫做 hutool 的通用工具类库

    摘自3.1.1版本作者发布原话,当时看到有点说不上的情绪,为作者的坚持.热爱点个赞. 已经想不起来是怎样结识 Hutool 的,但 Hutool 伴随几个项目的推进,获得了同事一致好评. 没经过实践和 ...

  8. LeetCode Questions List (LeetCode 问题列表)- Java Solutions

    因为在开始写这个博客之前,已经刷了100题了,所以现在还是有很多题目没有加进来,为了方便查找哪些没加进来,先列一个表可以比较清楚的查看,也方便给大家查找.如果有哪些题目的链接有错误,请大家留言和谅解, ...

  9. Spring MVC前后端的数据传输

    本篇文章主要介绍了Spring MVC中如何在前后端传输数据. 后端 ➡ 前端 在Spring MVC中这主要通过Model将数据从后端传送到前端,一般的写法为: @RequestMapping(va ...

  10. shell脚本学习(一):shell脚本开发的基本规范和习惯

    1.脚本第一行指定脚本解释器 #!/bin/bash 或 #!/bin/sh 2.脚本开头增加作者.脚本作用描述等信息 1 #!/bin/bash 2 #Author: iskylite 3 #Blo ...