Python第五章-内置数据结构04-字典
Python 内置的数据结构
四、字典(dict)
字典也是 python 提供给我们的又一个非常重要且有用的数据结构。
字典在别的语言中有时叫关联数组、关联内存、Map等。
字典中存储的是一系列的key-value
,这些key-value
称之为键值对。
字典与前面学习的序列不同,序列通过index
来索引数据,而字典则是通过key
来索引value
。
最好把字典认为是一系列无序键值对的集合。
序列(list):使用[]定义
元组(tuple):使用()定义
字典(dict):使用{}定义
键(key)是索引
值(value)是数据
键和值之间使用:分隔
键必须是唯一的
值可以是任意数据类型。但键只能使用字符串,数字或元组
5.1 字典的创建
4.1.1通过字面量形式创建
把这些键值对用comma(逗号)
隔开,再把这些键值对封装在一对brace(大括号)
中。 键与值之间用冒号隔开。
tels = {
"ls": 1604,
"zs": 1000,
"ww": 2000
}
print(tels)
如果在 {}
中不添加任何的键值对,则创建了一个空的字典。如果把它当布尔值来用的话,就是表示 False
d = {}
print(d) # {}
4.1.2 使用dict()
构造器创建
使用 dict()
构造器传入键值对序列创建出字典
d = dict([['space',4139],('guido',4127),('jack',4098)])
print(d)
#c = dict([('space',100),('guido',200),('jack',300)])
#print(c)
使用关键字参数创建
如果字典的key
是简单的字符串的时候,通过关键字参数也可以方便的创建字典
d = dict(sape=4139, guido=4127, jack=4098)
print(d)
4.1.3 通过字典推导创建字典(类似列表推导)
# key是3-9的数字,value 是他的3次方
d = {x: x ** 3 for x in range(3, 10)}
print(d)
4.2 字典中键和值
并不是所有的类型的数据都可以做dict
的key
,key
必须是不可变(immutable)
类型。
value
没有类型限制。
key
不允许重复。
数字和字符串经常用做key
,tuple
中如果存储的是数字、字符串或tuple
也可以做为key
.
list
是可变的,不能作为key
, 如果tuple
直接或者间接的包含了可变类型,也不能做为key
。
d = {
[10]: "abc" # list 不能作为 key
}
d = {
(10, 20): "hello" # tuple 可以作为 key
}
d = {
([10], [20]): "hello" # tuple 存储有可变类型,也不能做 key
}
4.3 字典的常用操作
字典的主要操作就是储存键值对、根据指定的key
获取对应的value
、删除键值对。
4.3.1 向字典中添加键值对
使用 字典名[键] = 值
的方式去添加
d = {"a": 97}
d["b"] = 98 #向 dict中添加新的键值对 "b"就是键, 98就是值
d["c"] = 99
print(d)
如果添加的时候key
已经存在了,则会用的新的值覆盖旧的值。
d = {"a": 97}
d["a"] = 970
print(d)
4.3.2 判断key
是否在dict
中存在
使用in
或not in
来判断。
d = {"ac": 98, "ab": 99, "c": 97}
print("ac" in d)
print("d" not in d)
4.3.3 根据key
获取value
直接使用字典名[键]
的方式获取
d = {"a": 97}
print(d["a"]) # 97
如果访问不存在的key
则会抛出异常。
d = {"ac": 98, "ab": 99, "c": 97}
print(d["aa"])
如果避免抛出异常,一般有 2 种方式:
- 先用
in
判断
d = {"ac": 98, "ab": 99, "c": 97}
if "aa" in d:
print(d["aa"])
- 使用字典的实例方法
get(key)
来访问
d = {"ac": 98, "ab": 99, "c": 97}
print(d.get("aa"))
print(d.get("aa", "随机给你的"))
print(d.get("ac", "随机给你的"))
4.3.4 删除key-value
使用关键字del
可以删除指定key
的key-value
对。
d = {"a": 97, "b": 98, "c": 99}
del d["a"]
print(d)
4.3.5 获取所有的key
通过list(dict.keys())
可以获取在字典中所有的key
组成的list
,这些 key 的顺序是随机的。
d = {"a": 98, "b": 99, "c": 97}
list1 = list(d.keys())
print(list1)
如果想获取排好序的key
可以会用sorted(dict.keys())
d = {"ac": 98, "ab": 99, "c": 97}
list1 = sorted(d.keys())
print(list1)
4.3.6 获取所有的 value
通过list(dict.values())
可以获取在字典中所有的 value 组成的list
,这些 value 的顺序是随机的。
d = {"a": 98, "b": 99, "c": 97}
list1 = list(d.values())
print(list1)
如果想获取排好序的key
可以会用sorted(dict.keys())
d = {"ac": 98, "ab": 99, "c": 97}
list1 = sorted(d.keys())
print(list1)
Python第五章-内置数据结构04-字典的更多相关文章
- Python第五章-内置数据结构05-集合
Python内置数据结构 五.集合(set) python 还提供了另外一种数据类型:set. set用于包含一组无序的不重复对象.所以set中的元素有点像dict的key.这是set与 list的最 ...
- Python第五章-内置数据结构01-字符串
Python 内置的数据结构 到目前为止,我们如果想保存一些数据,只能通过变量.但是如果遇到较多的数据要保存,这个时候时候用变量就变的不太现实. 我们需要能够保存大量数据的类似变量的东东,这种 ...
- Python第五章-内置数据结构02-列表
Python 内置的数据结构 二.列表(list) 想一想: 前面学习的字符串可以用来存储一串信息,那么想一想,怎样存储咱们班所有同学的名字呢? 定义100个变量,每个变量存放一个学生的姓名可行吗?有 ...
- Python第五章-内置数据结构03-元组
Python 内置的数据结构 三.元组(tuple) python 作为一个发展中的语言,也提供了其他的一些数据类型. tuple也是 python 中一个标准的序列类型. 他的一些操作和str和li ...
- Python的4个内置数据结构
Python提供了4个内置数据结构(内置指可以直接使用,无需先导入),可以保存任何对象集合,分别是列表.元组.字典和集合. 一.列表有序的可变对象集合. 1.列表的创建例子 list1 = []lis ...
- python的四种内置数据结构
对于每种编程语言一般都会规定一些容器来保存某些数据,就像java的集合和数组一样python也同样有这样的结构 而对于python他有四个这样的内置容器来存储数据,他们都是python语言的一部分可以 ...
- Python内置数据结构之字典dict
1. 字典 字典是Python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下.键可能是数(整数索引).字符串或元组.字典(日常生活中的字典和Python字典)旨在让你能够轻松地找到特定的单 ...
- 【Redis源代码剖析】 - Redis内置数据结构之字典dict
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51018337 今天我们来讲讲Redis中的哈希表. 哈希表在C++中相应的是ma ...
- [PY3]——内置数据结构(7)——字典及其常用操作
字典及其常用操作Xmind图 关于字典 字典是一种key-value结构 字典是无序的 字典的定义 # {}大括号可以直接定义一个空字典 In [1]: d={};type(d) Out[1]: di ...
随机推荐
- JAVA中对list map根据map某个key值进行排序
package test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; ...
- 强大的java工作流引擎,可视化开发工作流
我们先来看看什么是工作流? 所谓工作流引擎是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色.分工和条件的不同决定信息传递路由.内容等级等核心解决方案.工作流引擎包括 ...
- DotNet Core 使用 StackExchange.Redis 简单封装和实现分布式锁
前言 公司的项目以前一直使用 CSRedis 这个类库来操作 Redis,最近增加了一些新功能,会存储一些比较大的数据,内测的时候发现其中有两台服务器会莫名的报错 Unexpected respons ...
- unittest实战(三):用例编写
# coding:utf-8import unittestfrom selenium import webdriverimport timefrom ddt import ddt, data, unp ...
- 浅谈C# Dictionary实现原理
使用C#已经有好多年头了,然后突然有一天被问到C#Dictionary的基本实现,这让我反思到我一直处于拿来主义,能用就好,根本没有去考虑和学习一些底层架构,想想令人头皮发麻.下面开始学习一些我平时用 ...
- java反序列化-ysoserial-调试分析总结篇(5)
前言: 这篇文章继续分析commonscollections5,由如下调用链可以看到此时最外层的类不是annotationinvoke,也不是priorityqueue了,变成了badattribut ...
- 从0开始学Git——Git的常用配置
配置user信息 配置user.name和user.email git config --global user.name 'admin' #设置用户名 git config --global use ...
- 从头认识js-基本概念(关键字,保留字,数据类型)
语法 ECMAScript的语法大量借鉴了C及其他类C语言(如Java和Perl)的语法.因此,熟悉这些语言的开发人员在接受ECMSAScript更加宽松的语法时,一定会有一种轻松自在的感觉. 区分大 ...
- [Cts-Verifier]waiver-Camera-ITS-Test
[问题描述] 工具:Cts-Verifier-9.0-R11.apk 测试Camera ITS Test时,点击该测试项后verifier apk闪退.重新打开后该项未pass变绿. [问题结论] A ...
- javascript中的中介者模式——迪米特法则
”迪米特法则“——最少知识原则,不和陌生人说话,就是说,一个对象应当对其他对象有尽可能少的了解.talk only to your immediate friends.初衷是:降低对象之间的耦合度. ...