文档章节

走进Python世界(五)数据类型 5. 序列类型-字典(Dictionary)

Garrry
 Garrry
发布于 2015/07/27 15:15
字数 1138
阅读 172
收藏 4

什么是字典

字典是python中唯一的映射类型(哈希表)

字典是无序的

字典对象是可变的,但是字典的键必须使用不可变的对象,并且一个字典中可以使用不同的类型键值

keys() 或者values()返回键列表或者值列表

items()返回键值对的元组


创建字典

一般方法

常用的方式就是直接使用{}

一般语法如下:

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

工厂方法

使用工厂方法dict来创建字典

一般语法如下:

fdict=dict(['x',1],['y',2])

内建方法

使用内建方法fromkeys来创建字典吗,字典元素中的元素巨有相同的值,默认为none

一般语法如下:

ddict={}.fromkeys(('x','y'),-1)

访问字典

使用key来访问

使用key来访问字典的内容

一般语法如下:

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
dict[Alice]

循环遍历

如:

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
for key in dict.keys()
  print dict[k]

使用迭代器

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
for key in dict
  print dict[k]

注意如果要访问一个不存在的键,这会得到一个错误,如下所示:

dict['Zara']:
Traceback (most recent call last):
  File "test.py", line 4, in <module>
    print "dict['Alice']: ", dict['Alice'];
KeyError: 'Alice'

字典的更新和删除

更新字典:

可以通过添加一个新条目或项目(即一个键 - 值对),修改现有条目或删除。作为简单的例子,如下图所示在现有条目更新字词:

#!/usr/bin/python
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};

# update existing entry
dict['Age'] = 8; 

# Add new entry
dict['School'] = "DPS School";

删除字典元素:

可以删除单个字典元素或清除字典中的全部内容。也可以删除整个字典在一个单一的操作。

要删除整个字典,只要用del语句。下面是一个简单的例子:

#!/usr/bin/python
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
del dict['Name']; # remove entry with key 'Name'
dict.clear();     # remove all entries in dict
dict.pop('Name');     # remove entry with key Name and return its value
del dict ;        # delete entire dictionary
print "dict['Age']: ", dict['Age'];
print "dict['School']: ", dict['School'];

这将产生以下结果。注意引发异常,这是因为经过del dict删除,字典已经不存在了:

dict['Age']:
Traceback (most recent call last):
  File "test.py", line 8, in <module>
    print "dict['Age']: ", dict['Age'];
TypeError: 'type' object is unsubscriptable

字典的键的属性:

字典值没有限制。它们可以是任意Python对象,无论是标准的对象或用户定义的对象。但是作为键,是不可以这样的。

要记住字典中的键的两个要点:

(一)不准一个键对应多个条目。这意味着不能有重复的键。当有重复的键,在分配过程中以最后分配的为准。下面是一个简单的例子:

#!/usr/bin/python
dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'};
print "dict['Name']: ", dict['Name'];

当执行上面的代码,产生以下结果:

dict['Name']:  Manni

(二)键的值字必须是不可变的。这意味着可以使用字符串,数字或元组作为字典的键,但像['key']是不允许的。下面是一个简单的例子:

#!/usr/bin/python
dict = {['Name']: 'Zara', 'Age': 7};
print "dict['Name']: ", dict['Name'];

当执行上面的代码,产生以下结果:

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    dict = {['Name']: 'Zara', 'Age': 7};
TypeError: list objects are unhashable


内置字典功能和方法:

Python中包括以下字典功能:

SN 方法及描述
1 cmp(dict1, dict2)
比较两个字典的元素
2 len(dict)
字典的长度。这将等同于在字典中的项数
3 str(dict)
产生字典里可打印字符串表示形式
4 type(variable)
返回传递变量的类型。如果传递变量是字典,那么它将返回一个字典类型

Python中包括以下字典方法

SN 方法及描述
1 dict.clear()
删除字典dict中的所有元素
2 dict.copy()
返回字典dict的浅表副本
3 dict.fromkeys()
创建一个新的字典,设置键为seq 和值为value
4 dict.get(key, default=None)
对于键key,返回键,如果不是在字典的值或默认
5 dict.has_key(key)
如果在字典dict中存在键key,则返回true,否则返回 false
6 dict.items()
返回字典的(键,值)元组对的列表
7 dict.keys()
返回字典的键的列表
8 dict.setdefault(key, default=None)
类似get(),但会设定dict[key]=default如果key不是已经在于字典中
9 dict.update(dict2)
增加字典dict2的键值对到字典中
10 dict.values()
返回字典dict的值列表


© 著作权归作者所有

Garrry
粉丝 25
博文 46
码字总数 48703
作品 0
浦东
技术主管
私信 提问
Python3基础之学习笔记(三)-模块-pyc-数据类型-列表-元组-字典-集合-字符串

文章目录 1 模块 2 pyc 3 数据类型 4 三元运算符 5 Bytes 6 列表 7 元组 8 字典 9 集合 10 字符串 1 模块 1.1 sys模块 sys.path存储模块搜索路径,当导入模块时,先在当前目录下查找模块,如...

GoldenKitten
01/15
0
0
005-Python 变量类型

Python 变量类型 变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。因此,变量可以指定...

运维小当家
2018/06/29
0
0
Python基础入门教程(4)(数据类型)

人生苦短,我学Pyhton   Python(英语发音:/ˈpaɪθən/), 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年,Python 源代码同...

jamesjoshuasss
2017/03/07
0
0
Python 字典(Dictionary)

n字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示: d = {key1 : valu...

hcwj
2018/06/26
0
0
python基础数据类型(二)

根据http://runoob.com自己整理输出内容。 Python中的变量不需要声明,每个变量在使用前都必须赋值,变量赋值以后该变量才回被创建。 标准库模块keyword.kwlist下包含了不可作为标识符的所有...

白羊IT
2017/10/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

微信小程序和百度小程序开发的一些不同点

1: initActive从onload放到onready中 2: bindtap='{{childTickeData.freeadd?"childticket":""}}',语法错误。会导致页面加载不出来,而且也不报任何错。 3:使用搬家工具,支付api名称转换......

醉雨
18分钟前
1
0
最近执行过的SQL语句查询

SELECT TOP 1000 ST.text AS '执行的SQL语句' , QS.execution_count AS '执行次数' , QS.total_elapsed_time / 10000 AS '耗时' , QS.total_logical_reads AS '逻辑读取次数' , QS.total_lo......

神手--追魂
19分钟前
2
0
从濒临解散到浴火重生,OceanBase 这十年经历了什么?

阿里妹导读:谈及国产自研数据库,就不得不提 OceanBase。与很多人想象不同的是,OceanBase 并非衔着金钥匙出生的宠儿。相反,它曾无人看好、困难重重,整个团队甚至数度濒临解散。 从危在旦...

阿里云官方博客
23分钟前
1
0
阿里开发者招聘节 | 面试题02-04:给定一个二叉搜索树(BST),找到树中第K小的节点

为帮助开发者们提升面试技能、有机会入职阿里,云栖社区特别制作了这个专辑——阿里巴巴资深技术专家们结合多年的工作、面试经验总结提炼而成的面试真题这一次将陆续放出(面试题官方参考答案...

阿里云云栖社区
39分钟前
3
0
使用Redis SETNX 命令实现分布式锁

基于setnx和getset http://blog.csdn.net/lihao21/article/details/49104695 使用Redis的 SETNX 命令可以实现分布式锁,下文介绍其实现方法。 SETNX命令简介 命令格式 SETNX key value 将 ke...

彬彬公子
40分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部