前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 字典(Dictionary)

python 字典(Dictionary)

作者头像
py3study
发布2018-08-02 16:01:57
3590
发布2018-08-02 16:01:57
举报
文章被收录于专栏:python3python3

字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:

代码语言:javascript
复制
d = {key1 : value1, key2 : value2 }

键必须是唯一的,但值则不必。

值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

字典的特性:

dict是无序的

key必须是唯一的,so 天生去重

举个例子,下面是一个班级同学信息

代码语言:javascript
复制
info = {
    'stu1101': "Zhang San",
    'stu1102': "Li Si",
    'stu1103': "Wang Wu",
}
print(info)

执行输出

{'stu1101': 'Zhang San', 'stu1102': 'Li Si', 'stu1103': 'Wang Wu'}

查询

通过key查找

代码语言:javascript
复制
print(info.get("stu1101"))

执行输出 Zhang San

如果不存在,输出 None

还有一种方法,也可以查询,效果同上

代码语言:javascript
复制
print(info["stu1101"])

如果不存在,就报错

不推荐使用此方法

修改

代码语言:javascript
复制
info["stu1101"] = "Zhang Yi Xin"
print(info)

执行输出

{'stu1101': 'Zhang Yi Xin', 'stu1102': 'Li Si', 'stu1103': 'Wang Wu'}

添加

如果修改的key不存在,则添加

代码语言:javascript
复制
info["stu1104"] = "Feng Shao Feng"
print(info)

执行输出

{'stu1101': 'Zhang San', 'stu1102': 'Li Si', 'stu1103': 'Wang Wu', 'stu1104': 'Feng Shao Feng'}

删除

代码语言:javascript
复制
info["stu1104"] = "Feng Shao Feng"
info.pop("stu1103")
print(info)

执行输出

{'stu1101': 'Zhang San', 'stu1102': 'Li Si', 'stu1104': 'Feng Shao Feng'}

另外一个方法,也可以实现删除,效果同上

代码语言:javascript
复制
info["stu1104"] = "Feng Shao Feng"
del info["stu1103"]
print(info)

判断一个key是否存在字典中,可以使用in方法

代码语言:javascript
复制
print("stu1101" in info)

执行输出 True,不存在时,返回false

打印所有的值

代码语言:javascript
复制
print(info.values())

执行输出,不包括key

dict_values(['Zhang San', 'Li Si', 'Wang Wu'])

打印所有的key

代码语言:javascript
复制
print(info.keys())

执行输出

dict_keys(['stu1101', 'stu1102', 'stu1103'])

setdefault() 函数和get() 方法类似, 如果键不存在于字典中,将会添加键并将值设为默认值。

代码语言:javascript
复制
#删除一个key
info.pop("stu1101")
info.setdefault('stu1101',"Zhang Xue You")
print(info)

执行输出

{'stu1102': 'Li Si', 'stu1103': 'Wang Wu', 'stu1101': 'Zhang Xue You'}

以一个字典去并更新另外一个字典

代码语言:javascript
复制
info = {
    'stu1101': "Zhang San",
    'stu1102': "Li Si",
    'stu1103': "Wang Wu",
}
b = {
    'stu1101': "Zhang Zi Cheng",
    1:3,
    2:5,
}
info.update(b)
print(info)

执行输出

{'stu1101': 'Zhang Zi Cheng', 'stu1102': 'Li Si', 'stu1103': 'Wang Wu', 1: 3, 2: 5}

从上可以看出,update()方法,将2个字典合并了,Key相同的值被后面一个更新了。

将字典转换为列表

代码语言:javascript
复制
info = {
    'stu1101': "Zhang San",
    'stu1102': "Li Si",
    'stu1103': "Wang Wu",
}
print(info.items())

执行输出

dict_items([('stu1101', 'Zhang San'), ('stu1102', 'Li Si'), ('stu1103', 'Wang Wu')])

使用列表初始化一个字典

代码语言:javascript
复制
c = dict.fromkeys([6,7,8],"test")
print(c)

执行输出 {6: 'test', 7: 'test', 8: 'test'}

fromkeys是存在一个坑的,举个例子:

代码语言:javascript
复制
c = dict.fromkeys([6,7,8],[1,{"name":"jack"},333])
print(c)
#修改key为7的name值
c[7][1]['name'] = "rose"
print(c)

执行输出

{6: [1, {'name': 'jack'}, 333], 7: [1, {'name': 'jack'}, 333], 8: [1, {'name': 'jack'}, 333]}

{6: [1, {'name': 'rose'}, 333], 7: [1, {'name': 'rose'}, 333], 8: [1, {'name': 'rose'}, 333]}

怎么会这样?明明只修改了一个值,却都修改了。和浅copy类似的问题

注意: fromkeys后面的值,最好是一层的,如果有多层,修改时,会全部修改。

这个方法,尽量少用。

循环字典

方法1

代码语言:javascript
复制
for key in info:
    print(key,info[key])

执行输出

stu1101 Zhang San

stu1102 Li Si

stu1103 Wang Wu

方法2

代码语言:javascript
复制
#会先把dict转成list,数据里大时莫用
for k,v in info.items():
    print(k,v)

执行输出,效果同上。

推荐使用方法1

因为方法1,直接使用key去遍历字典

方法2,把数据转换为列表后,再输出,效率不够高效。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-02-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档