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 字典中键和值

并不是所有的类型的数据都可以做dictkeykey必须是不可变(immutable)类型。

value没有类型限制。

key不允许重复。

数字和字符串经常用做keytuple中如果存储的是数字、字符串或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中存在

使用innot 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 种方式:

  1. 先用 in 判断
d = {"ac": 98, "ab": 99, "c": 97}
if "aa" in d:
print(d["aa"])
  1. 使用字典的实例方法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可以删除指定keykey-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-字典的更多相关文章

  1. Python第五章-内置数据结构05-集合

    Python内置数据结构 五.集合(set) python 还提供了另外一种数据类型:set. set用于包含一组无序的不重复对象.所以set中的元素有点像dict的key.这是set与 list的最 ...

  2. Python第五章-内置数据结构01-字符串

    Python 内置的数据结构 ​ 到目前为止,我们如果想保存一些数据,只能通过变量.但是如果遇到较多的数据要保存,这个时候时候用变量就变的不太现实. ​ 我们需要能够保存大量数据的类似变量的东东,这种 ...

  3. Python第五章-内置数据结构02-列表

    Python 内置的数据结构 二.列表(list) 想一想: 前面学习的字符串可以用来存储一串信息,那么想一想,怎样存储咱们班所有同学的名字呢? 定义100个变量,每个变量存放一个学生的姓名可行吗?有 ...

  4. Python第五章-内置数据结构03-元组

    Python 内置的数据结构 三.元组(tuple) python 作为一个发展中的语言,也提供了其他的一些数据类型. tuple也是 python 中一个标准的序列类型. 他的一些操作和str和li ...

  5. Python的4个内置数据结构

    Python提供了4个内置数据结构(内置指可以直接使用,无需先导入),可以保存任何对象集合,分别是列表.元组.字典和集合. 一.列表有序的可变对象集合. 1.列表的创建例子 list1 = []lis ...

  6. python的四种内置数据结构

    对于每种编程语言一般都会规定一些容器来保存某些数据,就像java的集合和数组一样python也同样有这样的结构 而对于python他有四个这样的内置容器来存储数据,他们都是python语言的一部分可以 ...

  7. Python内置数据结构之字典dict

    1. 字典 字典是Python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下.键可能是数(整数索引).字符串或元组.字典(日常生活中的字典和Python字典)旨在让你能够轻松地找到特定的单 ...

  8. 【Redis源代码剖析】 - Redis内置数据结构之字典dict

    原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51018337 今天我们来讲讲Redis中的哈希表. 哈希表在C++中相应的是ma ...

  9. [PY3]——内置数据结构(7)——字典及其常用操作

    字典及其常用操作Xmind图 关于字典 字典是一种key-value结构 字典是无序的 字典的定义 # {}大括号可以直接定义一个空字典 In [1]: d={};type(d) Out[1]: di ...

随机推荐

  1. 初识Arduino

    Arduino是一款便捷灵活.方便上手的开源电子原型平台.包含硬件(各种型号的Arduino板)和软件(Arduino IDE).由一个欧洲开发团队于2005年冬季开发.其成员包括Massimo Ba ...

  2. 使用Blazor Server 线路处理程序 (circuit handler)跟踪打开的SignalR连接

    Blazor服务器允许定义线路处理程序(circuit handler)代码,该处理程序(handler)允许在更改用户线路状态时运行此代码. 线路处理程序(circuit handler)是通过从C ...

  3. mysql 常用获取时间sql语句

    --当年第一天: SELECT DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY); --当年最后一天: SELECT concat(YEAR(no ...

  4. SpringBoot1.5.10.RELEASE项目如何在tomcat容器中运行

    一. SpringBoot内嵌容器的部署方式 SpringBoot内部默认提供内嵌的tomcat容器,所以可以直接打成jar包,丢到服务器上的任何一个目录,然后在当前目录下执行java -jar de ...

  5. 盘点Mac上搭建本地WebServer的几种方式

    第一种: 通过Nginx搭建本地WebServer 安装nginx brew install nginx 安装完后在终端输入nginx指令,启动nginx查看效果 确定安装好之后,在根目录创建一个文件 ...

  6. 【python pip】一招解决pip下载过慢问题

    目录 概述 壹:问题描述 贰:解决过程 一.问题分析 二.问题解决 方法一:下载时加入参数-i [镜像源地址] 方法二:设置源 三.国内镜像源地址 叁:作者有话 作者 概述 在我们经常使用pip安装插 ...

  7. 【视频+图文】Java基础经典练习题(一)输出2-100之间的素数,及素数个数

    目录 第一题:判断2-100之间有多少个素数,并输出所有素数. 1.视频讲解: 2.思路分析: 代码讲解:以i=4为例 4.为大家准备了彩蛋: 能解决题目的代码并不是一次就可以写好的 我们需要根据我们 ...

  8. Java 基础(六):循环

    循环 老生常谈的一个控制流程了,我们在是使用数组和集合的时候,遍历元素的时候经常会用到循环的结构,Java具有非常灵活的三种循环机制: 根据是否知道循环的次数可以为分为while循环,do...whi ...

  9. 阅读GitHub源码的正确打开方式

    前言 近来发现阅读开源项目上手就整最新的代码不合适,缺少项目迭代的具体实现过程,想着若是可以看到针对问题的提交代码就好了,所以就有了本篇博客. 以文主要涉及:如何fork开源项目,如何保证本地仓库代码 ...

  10. Session的常用方法

    Session的常用方法 session对象主要用于属性操作和会话管理,常用方法如下: 1.public void setAttribute(String name,String value)设定指定 ...