获得更多资料欢迎进入我的网站或者 csdn或者博客园

本节主要介绍字典,字典也成映射,时python中唯一内建的映射类型。更多详细请点击readmore。下面附有之前的文章;

python入门之字符串

python入门之列表和元组

python入门之软件安装

字典的介绍与作用

在元组和列表中,都是通过编号进行元素的访问,但有的时候我们按名字进行数据甚至数据结构的访问,在c++和java中有map的概念,也就是映射。同样在python中也提供了内置的映射类型--字典。映射其实就是一组键(key)和值(value)以及之间的映射函数。键可以是数字、字符串甚至是元组。

字典类型与序列类型的区别:

1.存取和访问数据的方式不同。

2.序列类型只用数字类型的键(从序列的开始按数值顺序索引);

3.映射类型可以用其他对象类型作键(如:数字、字符串、元祖,一般用字符串作键),和序列类型的键不同.

4.映射类型的键直接或间接地和存储数据值相关联。

5.映射类型中的数据是无序排列的。这和序列类型是不一样的,序列类型是以数值序排列的。

6.映射类型用键直接“映射”到值。

创建字典

简单地说字典就是用大括号包裹的键值对的集合。

1可以通过一下方式创建:

字典由多个键及与其对应的值构成的对组成。每个键和它的值之间用冒号(:)隔开,项之间用逗号(,)隔开,而整个字典是由一对大括号括起来。

字典中的键必须是唯一的,而值可以不唯一。

>>> student_id={'peace':'201421014960','nick_peace':'201421014970','nicl_peace2':'201421014980'}
>>> student_id
{'peace': '201421014960', 'nicl_peace2': '201421014980', 'nick_peace': '201421014970'}
>>> student_id['peace']
'201421014960'

2可以通过dict函数创建

用 dict 函数,通过其他映射(比如其他字典)或者(键,值)这样的序列对建立字典。

#通过序列创建
>>> items=[('peace','201421014960'),('nick_peace','201421014970')]
>>> student_id=dict(items)
>>> student_id['nick_peace']
'201421014970'
>>>
#也可以通过关键字参数来创建
>>> student_id=dict(peace='201421014960',age=23)
>>> student_id
{'age': 23, 'peace': '201421014960'}
>>>

字典基本操作

字典的基本行为在很多方面与序列类似:

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

(2)d[k] 返回关联到键 k 上的值

(3)d[k] = v 将值 v 关联到键 k 上

(4)del d[k] 删除键为 k 的项

(5)k in d 检查 d 中是否有含有键为 k 的项

>>> student_id={'peace':'201421014960','nick_peace':'201421014970','nicl_peace2':'201421014980'}
>>> len(student_id)
3
>>> student_id['nick_peace']
'201421014970'
>>> student_id['nick_peace']=2014
>>> student_id
{'peace': '201421014960', 'nicl_peace2': '201421014980', 'nick_peace': 2014}
>>> del student_id['nick_peace']
>>> student_id
{'peace': '201421014960', 'nicl_peace2': '201421014980'}
>>> 'peace' in student_id
True
>>> 'nick_peace' in student_id
False

注意:

尽管字典和列表有很多特性相同,但也有下面一些重要的区别。

(1)键类型:字典的键不一定为整型数据(但也可能是),也可能是其他不可变类型,比如浮点型(实型)、字符串或者元组。

(2)自动添加:即使那个键起初在字典中并不存在,也可以为它分配一个值,这样字典就会建立新的项。

(3)成员资格:表达式 k in d (d 为字典) 查找的是键,而不是值。

例如:

>>> item=[]
>>> item[1]=23
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> item={}
>>> item[1]=23
>>> item
{1: 23}
>>>

字典的格式化字符串

在每个转换(conversion specifier)中的 % 字符后面,可以加上用圆括号括起来的键,后面再跟上其他说明元素。

>>> student_id={'peace':'201421014960','nick_peace':'201421014970','nicl_peace2':'201421014980'}
>>> "peace's student id is %(peace)s." % student_id
"peace's student id is 201421014960."
>>>

只要所有给出的键都能在字典中找到,就可以获得任意数量的转换说明符。这类字符串格式化在模板系统中非常有用:

>>> template = '''<html>
... ... <head><title>%(title)s</title></head>
... ... <body>
... ... <h1>%(title)s</h1>
... ... <p>%(text)s</p>
... ... </body>'''
>>> data = {'title':'My Home Page', 'text':'Welcome to my home page!'}
>>> print(template % data)
<html>
... <head><title>My Home Page</title></head>
... <body>
... <h1>My Home Page</h1>
... <p>Welcome to my home page!</p>
... </body>
>>>

字典方法

就像其他内建类型一样,字典也有方法,这些方法非常有用;下面对一些方法进行讲解

clear方法

clear 方法清除字典中所有的项。这是个原地操作,所以无返回值(或者说返回 None)。

>>> student_id={'peace':'201421014960','nick_peace':'201421014970','nicl_peace2':'201421014980'}
>>> student_id.clear()
>>> student_id
{}
>>>

copy方法

copy 方法返回一个具有相同键-值对的新字典(这个方法实现的是浅复制(shallow copy),因为值本身就是相同的,而不是副本)。

>>> student_id={'peace':'201421014960','nick_peace':'201421014970','pp':['p1','p2','p3']}
>>> stucopy=student_id.copy()
>>> stucopy['peace']='22222'
>>> stucopy['pp'].remove('p2')
>>> stucopy
{'peace': '22222', 'nick_peace': '201421014970', 'pp': ['p1', 'p3']}
>>> student_id
{'peace': '201421014960', 'pp': ['p1', 'p3'], 'nick_peace': '201421014970'}
>>>

上面,当在 y 中替换值的时候,x 不受影响,但是,如果修改了某个值(原地修改,而不是替换),x 也会改变,因为同样的值也存储在原字典中。

避免这个问题的一种方法就是使用深复制( deep copy),复制其包含所有的值。可以使用 copy 模块的 deepcopy 函数来完成操作。

>>> from copy import deepcopy
>>> student_id={'peace':'201421014960','nick_peace':'201421014970','pp':['p1','p2','p3']}
>>> stucopy=deepcopy(student_id)
>>> stucopy['peace']='22222'
>>> stucopy['pp'].remove('p2')
>>> stucopy
{'peace': '22222', 'nick_peace': '201421014970', 'pp': ['p1', 'p3']}
>>> student_id
{'peace': '201421014960', 'pp': ['p1', 'p2', 'p3'], 'nick_peace': '201421014970'}

fromkeys方法

fromkeys 方法使用给定的键建立新的字典,每个键默认对应的值为 None。

#空字典建立
>>> {}.fromkeys(['peace','nixk'])
{'peace': None, 'nixk': None}
#直接在所有字典的类型 dict 上面调用方法
>>> dict.fromkeys(['peace','nixk'])
{'peace': None, 'nixk': None}
#不想使用None作为默认值,也可以自己提供默认值。
>>> dict.fromkeys(['peace','nixk'],'(handsome)')
{'peace': '(handsome)', 'nixk': '(handsome)'}

get方法

get方法和的d[key]类似

#当使用 get 访问一个不存在的键时,没有任何异常,而得到了 None 值。
>>> student_id
{'peace': '201421014960', 'pp': ['p1', 'p2', 'p3'], 'nick_peace': '201421014970'}
>>> print(student_id['pp'])
['p1', 'p2', 'p3']
>>> print(student_id['pp1'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'pp1'
>>> print(student_id.get('pp1'))
None
#可以定义“默认”返回值,替换 None:
>>> print(student_id.get('pp1','N/A'))
N/A
#如果键存在,get用起来就像普通的字典查询一样。
>>> print(student_id.get('pp','N/A'))
['p1', 'p2', 'p3']
>>>

items方法

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

>>> student_id
{'peace': '201421014960', 'pp': ['p1', 'p2', 'p3'], 'nick_peace': '201421014970'}
>>> student_id.items()
dict_items([('peace', '201421014960'), ('pp', ['p1', 'p2', 'p3']), ('nick_peace', '201421014970')])

keys方法

keys 方法将字典中的键以 dict_keys 形式返回。

>>> student_id
{'peace': '201421014960', 'pp': ['p1', 'p2', 'p3'], 'nick_peace': '201421014970'}
>>> student_id.keys()
dict_keys(['peace', 'pp', 'nick_peace'])
>>>

pop方法和popitem

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

>>> student_id
{'peace': '201421014960', 'pp': ['p1', 'p2', 'p3'], 'nick_peace': '201421014970'}
>>> student_id.pop('peace')
'201421014960'
>>> student_id
{'pp': ['p1', 'p2', 'p3'], 'nick_peace': '201421014970'}
>>>

popitem 弹出随机的项和将这个键-值对从字典中移除。

>>> student_id
{'pp': ['p1', 'p2', 'p3'], 'nick_peace': '201421014970'}
>>> student_id.popitem()
('pp', ['p1', 'p2', 'p3'])
>>> student_id.popitem()
('nick_peace', '201421014970')
>>> student_id
{}
>>>

setdefaut方法

setdefault 方法在某种程度上类似于 get 方法,就是能够获得与给定键相关联的值,除此之外,setdefault 还能在字典中不含有给定键的情况下设定相应的键值。当键不存在的时候,setdefault 返回默认值并且相应地更新字典。如果键存在,那么就返回与其相应的值,但不改变字典。

>>> d = {}
>>> d.setdefault('name', 'N/A')
'N/A'
>>> d
{'name': 'N/A'}
>>> d['name'] = 'Gumby'
>>> d.setdefault('name', 'N/A')
'Gumby'
>>> d
{'name': 'Gumby'}

update方法

update 方法可以利用一个字典项更新另一个字典。

>>> d={'peace':'2222222',"pp":111}
>>> x={'peace':'201421014960'}
>>> d.update(x)
>>> d
{'peace': '201421014960', 'pp': 111}
>>>

value方法

values 方法以 dict_values 的形式返回字典中的值。

>>> d
{'peace': '201421014960', 'pp': 111}
>>> d.values()
dict_values(['201421014960', 111])
>>>

字典的遍历

遍历字典的值

for value in adict.values():

>>> d
{'1': 2, '3': 4, '5': 6}
>>> for i in d.values():print(str(i))
...
2
4
6
>>>

遍历字典的键

for key in adict.keys():

>>> d
{'1': 2, '3': 4, '5': 6}
>>> for i in d:print(str(i))
...
1
3
5
>>> for i in d.keys():print(str(i))
...
1
3
5
>>>

遍历字典的项

for item,value in adict.items():

>>> d
{'1': 2, '3': 4, '5': 6}
>>> for key,values in d.items():print(str(key)+","+str(values))
...
1,2
3,4
5,6
>>>

字典就讲到这里;

相关链接:

python3入门之类

python3入门之函数

python3入门之循环

python3之if语句

python3入门之赋值语句介绍

python3入门之print,import,input介绍

python3入门之set

python3入门之字典

python3入门之字符串

python3入门之列表和元组

python3入门之软件安装

python3爬虫之入门和正则表达式

python3入门之字典的更多相关文章

  1. python3入门之类

    在面向对象的语言中,类是最重要的一环,python自然拥有类这个机制.python的类机制,与C++,java的区别不是很大,类的大多数的重要特性都被沿用了,一样可以多态,抽象,封装: python3 ...

  2. python3入门之集合set

    之前介绍python的数据结构时,没有介绍set(集合)现在在这里稍微介绍下: set原理 Python 还 包 含 了 一 个 数 据 类 型-- set ( 集 合 ) . 集 合 是 一 个 无 ...

  3. python3入门之函数

    相信大家学习过其他语言,懂得函数的作用.简单的说函数最好的作用就是可以使程序变得懒惰.python作为后起之秀,当然也会拥有函数这个有用的东西: 创建函数 使用def语句即可创建函数,如创建一个用来生 ...

  4. python3入门之赋值语句介绍

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 本节主要介绍赋值语句,以及几种特殊的赋值.下面附有之前的文章: python3入门之print,import,input介绍 python入门之字 ...

  5. python3入门之print,import,input介绍

    本节主要介绍print,import和input,t函数,包括他们在python2.7和python3 的区别以及用法.下面附有之前的文章: ​ python3的print函数的变化 python3之 ...

  6. python3入门之字符串

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 经过前面的介绍相信大家也对python有了一个初步的了解:本节主要介绍字符串,不管学习什么编语言字符串一定在其中扮演着重要的地位.本节主要讲解,字 ...

  7. python3入门之列表和元组

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 前面一张主要学习了Python的安装,以及第一个程序helloword的编写,以及简单的输入和输出函数,这章主要介绍序列,列表,元组 序列  这章 ...

  8. Python3入门之软件安装

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 最近将我的Python笔记整理下,希望能对他人有所帮助,这是第一课,安装入门篇: windows下安装Python 1.下载,从这里下载:[下载链 ...

  9. 全面系统Python3入门+进阶课程 ✌✌

    全面系统Python3入门+进阶课程 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 无论是大数据.人工智能还是机器学习,Python都是最热门的首选语言 ,这 ...

随机推荐

  1. leetcode539

    public class Solution { public int FindMinDifference(IList<string> timePoints) { * ]; foreach ...

  2. RT2870移植到s3c2416后续验证无线…

    我的无线网卡显示的事ra0,所以把下面的wlan0换成ra0即可:视自己的情况而定 1. 打开无线网卡电源 iwconfig wlan0 txpower on 2. 列出区域内的无线网络 iwlist ...

  3. linux的基本指令--第三节

    查找与检索: 一.文件名查找:find . -name "test*"      find 路径  查找类型  名字  未输入路径则默认当前路径 二 . 内容检索:grep  &q ...

  4. java基础知识(三)之数组

    声明数组: 语法:数据类型[ ] 数组名://例:int[ ] scores;  或者 数据类型 数组名[ ]://例:int scores[ ];分配空间 语法:数组名 = new 数据类型 [ 数 ...

  5. poj2104 主席树模板题

    题意 给出n个数字组成的数字序列,有m组询问.每次询问包含三个数字l,r,k.对于每个询问输出序列区间[l,r]中第k大的数字. 分析 这是主席树的模板题,套板子就可以 #include <cs ...

  6. css一div内文字居中

    在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...

  7. VBox 安装 Ubuntu Server 的那些坑,键盘乱码、网卡互连、共享目录等

    1.更新,相信大家都是有强迫症的 sudo apt-get update sudo apt-get upgrade 出现错误:Could not open lock file /var/lib/dpk ...

  8. 默默的发现在网上找到的hook NtQueryDirectoryFile......

    默默的发现在网上找到的hook  NtQueryDirectoryFile...... hook  NtQueryDirectoryFile是为了实现文件隐藏,然后就发现在网上发现的代码版本似乎同一个 ...

  9. urllib2设置代理

    #coding=utf-8 #公司网络只有连接vpn跳板机才能使用该模块 import urllib2 proxy_handler=urllib2.ProxyHandler({'http':'http ...

  10. Responsive设计——meta标签

    media-queries.js(http://code.google.com/p/css3-mediaqueries-js/) respond.js(https://github.com/scott ...