一、描述

  • 由键值key-value组成的数据的集合
  • 可变、无序的,key不可以重复
  • 字典的键key要可hash(列表、字典、集合不可哈希),不可变的数据结构是可哈希的(字符串、元组、对象、bytes)
  • 字典的值value可以是任意的数据类型

二、字典的相关操作

1、访问字典的值value

  • 字典可以通过key去访问对应的值
  • key不存在抛出KeyError异常
 d = {"name": "wj", "age": 22}
print(d["name"]) 运行结果如下:
wj

2、dict.get(key[, default])

  • 返回key对应的值value
  • key不存在返回缺省值default,如果没有设置缺省值就返回None
 d = {"name": "wj", "age": 22}
print(d.get("name")) 运行结果如下:
wj

3、dict.setdefault(key[, default])

  • 返回key对应的值value
  • key不存在就创建这对kv对,value是default值,如果没有设置default值,缺省为None
 d = {"name": "wj", "age": 22}
print(d.setdefault("gender", "F"))
print(d) 运行结果如下:
F
{'name': 'wj', 'age': 22, 'gender': 'F'}

4、通过key去增加或者修改值

  • 如果key存在就修改值,如果key不存在就增加该键值对
 d = {"name": "wj", "age": 22}
d["name"] = "yzw"
print(d)
d["gender"] = "F"
print(d) 运行结果如下:
{'name': 'yzw', 'age': 22}
{'name': 'yzw', 'gender': 'F', 'age': 22}

5、dict.update([other])

  • 使用另外一个字典的kv对更新本字典
  • 如果key存在,就更新,不存在,就增加
 d = {"name": "wj", "age": 22}
d.update(name="yaw")
d.update((("gender", "F"), ))
d.update({"birthday": "8-7"})
print(d) 运行结果如下:
{'gender': 'F', 'name': 'yaw', 'birthday': '8-7', 'age': 22}

6、dict.pop(key[, default])

  • key存在,移除它,并返回它的值value
  • 可以不存在,返回默认值defalut,没有设置defalut,抛出异常KeyError
 d = {"name": "wj", "age": 22}
d.pop("name")
print(d) 运行结果如下:
{'age': 22}

7、dict.popitem()

  • 移除并返回一个任意的键值对
  • 如果字典为空,抛异常KeyError
 d = {"name": "wj", "age": 22}
d.popitem()
print(d) 运行结果如下:
{'name': 'wj'}

8、dict.clear()

  • 清空字典

9、字典的删除

  • 通过del语句直接删除字典或者删除指定的key
 d = {"name": "wj", "age": 22}
del d["name"]
print(d)
del d
# print(d) NameError: name 'd' is not defined 运行结果如下:
{'age': 22}

10、字典遍历

  • 遍历key
 d = {"name": "wj", "age": 22}
for k in d:
print(k)
 d = {"name": "wj", "age": 22}
for k in d.keys():
print(k)
  • 遍历value
 d = {"name": "wj", "age": 22}
for k in d:
print(d[k])
 d = {"name": "wj", "age": 22}
for k in d:
print(d.get(k))
 d = {"name": "wj", "age": 22}
for k in d.values():
print(k)
  • 遍历item,键值对
 d = {"name": "wj", "age": 22}
for k, v in d.items():
print(k, v)

11、字典遍历和移除

  • 注意,字典在遍历的时候是不能够移除其元素的,否则抛异常RuntimeError
  • 如果想要在遍历的时候移除元素,可以在遍历的时候将key加入到一个列表中,然后遍历这个列表,来移除key
 d = {"name": "wj", "age": 22}
keys = []
for k, v in d.items():
keys.append(k) for k in keys:
d.pop(k) print(d) 运行结果如下:
{}

12、工厂函数defaultdict

  • 当key不存在的时候,会调用这个工厂函数来生成key对应的值value
 from collections import defaultdict
import random d = defaultdict(list)
for k in "abcde":
for i in range(random.randint(1, 5)):
d[k].append(i) print(d) 运行结果如下:
defaultdict(<class 'list'>, {'d': [0, 1, 2, 3], 'a': [0], 'c': [0, 1, 2, 3, 4], 'b': [0, 1, 2, 3, 4], 'e': [0, 1, 2, 3, 4]})

13、有序字典OrderedDict

  • 有序字典会记录元素插入的顺序,打印的时候也是按照这个顺序打印的
  • 比如:有的时候需要取出ID,希望是按照输入时的顺序取出,因为输入时的顺序是有序的,这种情况可以使用有序字典
 d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}
print(d)
from collections import OrderedDict
od = OrderedDict()
for k, v in d.items():
od[k] = d[k]
print(od) 运行结果如下:
{'pear': 1, 'orange': 2, 'banana': 3, 'apple': 4}
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

(python)数据结构---字典的更多相关文章

  1. python 数据结构-字典

    原文地址:http://docs.pythontab.com/python/python3.4/datastructures.html#tut-tuples 理解字典的最佳方式是把它看做无序的键: 值 ...

  2. Python数据结构-字典

    tel={,} tel[ print(tel) print(tel['tom']) del tel['tom'] print(tel) print(tel.keys()) 运行结果: {, , } { ...

  3. Python数据结构:列表、元组和字典

    在Python中有三种内建的数据结构——列表list.元组tuple和字典dict 列表中的项目包括在方括号中,项目之间用逗号分割 元组和列表十分类似,只不过元组和字符串一样是不可变的 即你不能修改元 ...

  4. python数据结构与算法

    最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

  5. python数据结构之图的实现

    python数据结构之图的实现,官方有一篇文章介绍,http://www.python.org/doc/essays/graphs.html 下面简要的介绍下: 比如有这么一张图: A -> B ...

  6. Python数据结构与算法--List和Dictionaries

    Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...

  7. Python数据结构与算法--算法分析

    在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...

  8. Python数据结构之注意事项

    1.列表 列表是Python中使用最频繁的数据结构,列表提供很多函数操作,比如下标存取,分片,index,append,remove等等. 例如:  list=[1,2,'hello','python ...

  9. Python数据结构之四——set(集合)

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 经过几天的回顾和学习,我终于把Python 3.x中的基础知识介绍好啦.下面将要继续什么呢?让我想想先~~~嗯,还是 ...

  10. Python学习【第2篇】:Python数据结构

    Python数据结构 1.数字类型 2.字符串 3.列表 4.元组 5.字典 6.集合

随机推荐

  1. 全网最详细的最新稳定OSSEC搭建部署(ossec-server(CentOS6.X)和ossec-agent(CentOS6.X))(图文详解)

    不多说,直接上干货! 前言 写在前面的话,网上能够找到一些关于ossec方面的资料,虽然很少,但是总比没有强,不过在实际的使用过程中还是会碰到许多稀奇古怪的问题.整理整理我的使用过程,就当做一篇笔记吧 ...

  2. 不一样的ssm

    这里的ssm不是指的spring+springmvc+mybatis,而是指的spring+springmvc+mongodb,下面我将搭建一个简单的“ssm”框架. 1.新建一个maven项目,骨架 ...

  3. httpd的编译安装

    1.环境介绍 系统:2.6.32-279.el6.i686 2.准备编译环境 [root@localhost ~]# yum groupinstall "Server Platform De ...

  4. 一文带你学会使用YOLO及Opencv完成图像及视频流目标检测(上)|附源码

    计算机视觉领域中,目标检测一直是工业应用上比较热门且成熟的应用领域,比如人脸识别.行人检测等,国内的旷视科技.商汤科技等公司在该领域占据行业领先地位.相对于图像分类任务而言,目标检测会更加复杂一些,不 ...

  5. Gradle nexus 解决开发机器不连网无法下载gradle插件问题

    在用gradle时常规配置如下(D:\gradle-4.9\init.d\init.gradle文件,没有这个文件时自建): ext { nexus = 'http://192.168.127.128 ...

  6. python三大神器之pip

    pip是一款管理python各类包和库的工具,非常好用.下文介绍常用的一些命令. ● 安装:pip install 库名 也可以指定版本:pip install 库名=版本 ● 卸载:pip unin ...

  7. 前端XSS相关整理

    前端安全方面,主要需要关注 XSS(跨站脚本攻击 Cross-site scripting) 和 CSRF(跨站请求伪造 Cross-site request forgery) 当然了,也不是说要忽略 ...

  8. man sm-notify(sm-notify命令中文手册)

    本人译作集合:http://www.cnblogs.com/f-ck-need-u/p/7048359.html sm-notify命令是用来发送重启通知信息给NFS对端的,在锁状态恢复过程中起着至关 ...

  9. Perl检查引用类型

    有时候可能会需要检查引用是什么类型的,免得我们期待是一个数组引用,却给了一个hash引用. ref函数可以用来检查引用的类型,并返回类型.perl中内置了如下几种引用类型,如果检查的不是引用,则返回u ...

  10. 分布式系统监视zabbix讲解二之邮件报警通知--技术流ken

    概述 在上一篇博客<分布式系统监视zabbix讲解一技术流ken>中已经详细讲解了如何安装zabbix,本篇博客将详细讲解如何使用zabbix监控另外一台主机,并实现email报警通知机制 ...