Python中的字典dict

字典是python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下。键不可修改且不能重复的,所以其可能是数字、字符串或元组,而不可能是list。字典中键-值对被称为项(item),其语法如下:

{"Alice": 12, "Beth": 11, "Danny": 14}

1 函数dict

>>> items = [('name', 'Alice'), ('age', 12)]
>>> d = dict(items)
>>> d
{'name': 'Alice', 'age': 12}
>>> d = dict(name='Beth', age=11)
>>> d
{'name': 'Beth', 'age': 11}

2 基本操作

len(d):返回字典d中的(键值对数)项数。

d[k]:返回与键k相关联的值。

d[k] = v:将v的值关联到键k。

del d[k]:删除键为k的项。

k in d:检查字典d是否包含键为k的项。

# 一个简单的数据库
# 一个将人名用作键的字典。每个人都用一个字典表示。
# 字典包含键‘phone’和‘addr’,它们分别与电话号码和地址相关联
people = {"Alice": {"phone": "2341","addr": "Foo drive 23"},"Beth": {"phone": "9102","addr": "Bar street 42"},"Cecil": {"phone": "3158","addr": "Baz avenue 90"}
}# 电话号码和地址的描述性标签,供打印输出使用
labels = {"phone": "phone number","addr": "address"
}name = input("Name:")# 要查找电话号码还是地址?
request = input("Phone number (p) or address (a)? ")# 使用正确的键:
if request == "p":key = "phone"if request == "a":key = "addr"# 仅当名字是字典包含的键时才打印信息
if name in people:print("{}'s {} is {}".format(name, labels[key], people[name][key]))

运行结果:

Name:Beth
Phone number (p) or address (a)? p
Beth's phone number is 9102

3 字典方法

    3.1 clear

清除所有的字典项,没有返回值。

d = {}
d["name"] = "Gumby"
d["age"] = 42
print(d)
d.clear()
print(d)
{'name': 'Gumby', 'age': 42}
{}

    3.2 copy

返回一个新字典,这个方法是浅复制。当替换副本的值时,原件不受影响;然而,如果修改副本中的值,原件也会改变。因为原件指向的也是被修改的值。

# 浅复制
x = {"username": "admin",  "machines": ["foo", "bar", "baz"]}
y = x.copy()
y["username"] = "mlh"
y["machines"].remove("bar")
print("y:", y)
print("x:", x)

 运行结果:

y: {'username': 'mlh', 'machines': ['foo', 'baz']}
x: {'username': 'admin', 'machines': ['foo', 'baz']}

 为解决这个问题,可以使用模块copy中的deepcopy实现深复制,将同时复制值及其包含的所有值。

# 深复制
from copy import deepcopy
d = {}
d["names"] = ["Alfred", "Bertrand"]
c = d.copy()
dc = deepcopy(d)
d["names"].append("Clive")
print("c:", c)
print("dc:", dc)

 运行结果:

c: {'names': ['Alfred', 'Bertrand', 'Clive']}
dc: {'names': ['Alfred', 'Bertrand']}

    3.3 fromkeys

创建一个新字典,其中包含指定的键,且默认每个键对应的值都是None。

d = dict.fromkeys(["name", "age"])
print(d)
d = dict.fromkeys(["name", "age"], "(unknown)")
print(d)

运行结果:

{'name': None, 'age': None}
{'name': '(unknown)', 'age': '(unknown)'}

    3.4 get

通常,使用[键]的方式访问字典中没有的项,将会引发错误。而用get方法来访问不存在的键时,不会引发异常,而是返回None,若指定默认值,这样将返回指定的默认值而不是None。

x = {"username": "admin",  "machines": ["foo", "bar", "baz"]}
print(x.get("username", "N/A"))
print(x.get("addr"))
print(x.get("addr", "N/A"))

运行结果:

admin
None
N/A

    3.5 items

返回一个包含所有字典项的列表,其中每个元素都为(key, value)的形式。该列表属于特殊类型字典视图,这只是底层字典的反映,而不是复制。

d = {"title": "Python Web Site", "url": "http://www.python.org", "spam": 0}
it = d.items()
print(it)
print(len(it))
print(("spam", 0) in it)
d["spam"] = 1
print(("spam", 0) in it)

运行结果:

dict_items([('title', 'Python Web Site'), ('url', 'http://www.python.org'), ('spam', 0)])
3
True
False

    3.6 keys

返回一个字典试图,其中包含指定字典中的键。

>>> d = {"title": "Python Web Site", "url": "http://www.python.org", "spam": 0}
>>> d.keys()
dict_keys(['title', 'url', 'spam'])

    3.7 pop

获取与指定键相关联的值,并将该键-值对从字典中删除。

>>> d = {"title": "Python Web Site", "url": "http://www.python.org", "spam": 0}
>>> d
{'title': 'Python Web Site', 'url': 'http://www.python.org', 'spam': 0}
>>> d.pop("title")
Python Web Site
>>> d
{'url': 'http://www.python.org', 'spam': 0}

     3.8 popitem

随机的弹出一个字典项,因为字典项的顺序是不确定的,没有“最后一个元素”的概念。

>>> d = {"title": "Python Web Site", "url": "http://www.python.org", "spam": 0}
>>> d
{'title': 'Python Web Site', 'url': 'http://www.python.org', 'spam': 0}
>>> d.popitem()
('spam', 0)
>>> d
{'title': 'Python Web Site', 'url': 'http://www.python.org'}

    3.9 updata

使用一个字典中的项来更新另一个字典。

>>> d = {"title": "Python Web Site", "url": "http://www.python.org", "spam": 0}
>>> d
{'title': 'Python Web Site', 'url': 'http://www.python.org', 'spam': 0}
>>> x = {"title": "Python Language Website"}
>>> d.update(x)
>>> d
{'title': 'Python Language Website', 'url': 'http://www.python.org', 'spam': 0}

    3.10 values

返回一个由字典中的值组成的字典试图。

>>> x = {"username": "admin",  "machines": ["foo", "bar", "baz"]}
>>> x.values()
dict_values(['admin', ['foo', 'bar', 'baz']])

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Drive.ai轰然倒下:曾估值两亿,吴恩达夫妇站台,苹果将接盘部分可用技术人才...

来源:大数据文摘曾经估值两个亿美元,吴恩达夫妇亲自站台,风极一时的无人车创业公司Drive.ai轰然倒塌。本月20日,总部位于加州山景城的 Drive.ai 公司被证实已经向一家州政府机构递交了通知,表明即将关闭,并…

PyMC3实现贝叶斯神经网络

转自https://blog.csdn.net/jackxu8/article/details/71308390#commentBox 源地址https://docs.pymc.io/notebooks/bayesian_neural_network_advi.html PyMC3中的贝叶斯深网络 生成数据 产生一个简单的线性不可分的二分类问题的模拟数据。 %matplotlib inline import pymc…

Dynamics CRM 开启图表的3D效果展示

CRM中的图表在我们的业务场景中用的很多,用户可以根据自己的实际需求来构建图表查看数据。我们平时看到的图表都是平面的,像下图中的这种,那有没有一种方式可以让展示3D效果看起来更立体呢,答案是可以的。 这里就以上面的图表为例…

OpenCV初体验

OpenCV提供了一些实用工具来读取从视频流到摄像机画面的各种各样的图像格式&#xff0c;这些工具都是HighGUI的一部分。下面几个小例子可以让初学者提前体验一下OpenCV的功能。 1. 打开一张图像并且将其显示在屏幕上 #include "stdafx.h" #include <opencv2/ope…

“CRISPR婴儿”计划疯狂重启 顶级科学家们表示无力阻止

来源&#xff1a; 生物通新的“CRISPR婴儿”计划启动&#xff0c;顶级科学人士感到震惊&#xff0c;却表示他们无力阻止它6月10日&#xff0c;俄罗斯分子生物学家Denis Rebrikov表示计划开展基因编辑婴儿实验&#xff0c;并公开了他将跨越“红线”的研究计划。两位有影响力的学…

写一些脚本的心得总结系列第3篇------同步数据到其他表

3.同步数据到其他表的。 这种又分插入和更新字段两种情况&#xff0c;除了sql方面的逻辑外&#xff0c;要考虑记录执行sql和变化前后数据记录。总是要做最坏的打算&#xff0c;一旦更新错了还能回滚数据。 比如在更新之前先记录被更新的数据记录到某表&#xff08;新建表&#…

PyMC3和Lasagne构建神经网络(ANN)和卷积神经网络(CNN)

转自http://www.sohu.com/a/162460147_505915 源地址https://twiecki.io/blog/2016/07/05/bayesian-deep-learning/ 今天&#xff0c;我们将使用Lasagne构建一个更有趣的模型&#xff0c;这是一个灵活的Theano图书馆&#xff0c;用于构建各种类型的神经网络。你可能知道&…

OpenCV高斯滤波GaussianBlur

图像处理中&#xff0c;常用的滤波算法有均值滤波、中值滤波以及高斯滤波等。 三种滤波器的对比滤波器种类基本原理特点均值滤波使用模板内所有像素的平均值代替模板中心像素灰度值易收到噪声的干扰&#xff0c;不能完全消除噪声&#xff0c;只能相对减弱噪声中值滤波计算模板内…

(附视频) | AI奠基人、美国AI科学家特伦斯谈深度学习​

来源&#xff1a;笑看国际风云特伦斯 谢诺夫斯基&#xff08;Terrence Sejnowski&#xff09;&#xff1a;世界十大人工智能科学家之一&#xff0c;还是美国仅3位在世的‘四院院士’之一&#xff0c;同时兼任全球人工智能顶级会议NIPS基金会主席。1989年&#xff0c;特伦斯加入…

Chapter 3.GDI/DirectDraw Internal Data Structures

说明&#xff0c;在这里决定跳过第二章&#xff0c;实在是因为里面涉及的内容太理论&#xff0c;对我而言又太艰深 3.1 HANDLES AND OBJECT-ORIRNTED PROGRAMMING In normal object-oriented programming practice,information hiding is achieved by declaring certain member…

OpenCV图像金字塔

图像金字塔是图像多尺度表达的一种&#xff0c;是一种以多分辨率来解释图像的有效但概念简单的结构。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低&#xff0c;且来源于同一张原始图的图像集合。其通过梯次向下采样获得&#xff0c;直到达到某个终止条件才停止采…

带你深入理解图灵机--天才所在的时代

来源&#xff1a;人机与认知实验室这几年由于区块链的大热&#xff0c;以太坊独特的solidity语言实现智能合约功能&#xff0c;图灵完备这个词走进大家的视线。没有计算机专业知识的同学其实很难理解这个词的意思&#xff0c;其实计算机专业的同学都没有深入理解图灵机&#xf…

用PyMC3进行贝叶斯统计分析(代码+实例)

问题类型1&#xff1a;参数估计 真实值是否等于X&#xff1f; 给出数据&#xff0c;对于参数&#xff0c;可能的值的概率分布是多少&#xff1f; 例子1&#xff1a;抛硬币问题 硬币扔了n次&#xff0c;正面朝上是h次。 参数问题 想知道 p 的可能性。给定 n 扔的次数和 h …

2015总结及2016计划

2015计划完成情况&#xff1a; 1.网站建起来&#xff08;未完成&#xff09; 2.发布一款游戏&#xff08;cocos2dx或u3d&#xff09;&#xff08;未完成&#xff09; 3.稳定一年工作&#xff08;完成&#xff09; 4.学习C或C&#xff0c;能够使用其中一种进行windows编程&#…

华为: 即将发布5G+VR的颠覆式智能眼镜

来源&#xff1a;VR每日必看6月27日MWC19上海期间&#xff0c;华为手机业务总裁何刚在全球终端峰会发表演讲&#xff0c;提及华为终端在5G时代的全场景战略是“18N”。“1”就是华为手机&#xff0c;“8”则囊括了TV、平板、PC、耳机、车机、手表、眼镜、音响八项终端产品&…

OpenCV的数据类型——基础数据类型

OpenCV有很多数据类型&#xff0c;从组织结构的角度来看&#xff0c;OpenCV的基础类型类型主要分为三类。第一类是直接从C原语中继承的基础数据类型&#xff1b;第二类是辅助对象&#xff1b;第三类是大型数据类型。本文主要介绍OpenCV的基础数据类型。 目录 Point类 Scalar…

Process finished with exit code -1073741819 (0xC0000005)

运行TensorFlow出现如下错误&#xff0c;尝试了很多网上的方法都不行&#xff0c;最后把代码中的中文路径改为英文后就解决了

LeetCode - Partition List

题目&#xff1a; Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x. You should preserve the original relative order of the nodes in each of the two partitions. For example, Given 1-…

Cell:重大突破!三位学术大咖,打造全新“DNA显微镜”

来源&#xff1a;中国生物技术网传统上&#xff0c;科学家们使用光、X射线和电子来观察组织和细胞的内部。如今&#xff0c;科学家们能够在整个大脑中追踪线状的神经纤维&#xff0c;甚至可以观察活的小鼠胚胎如何产生原始心脏中的跳动细胞。但是这些显微镜无法看到的是&#x…

OpenCV的数据类型——辅助对象

在上一篇文章中&#xff0c;主要介绍了OpenCV的基础数据类型。接下来在本篇文章中将主要对OpenCV的辅助对象进行介绍。 cv::TermCriteria类 在很多算法中都存在着循环嵌套&#xff0c;只有满足终止条件时才会退出。通常情况下&#xff0c;终止条件的形式要么是达到允许的有限…