京公网安备 11010802034615号
经营许可证编号:京B2-20210330
Python中字典映射类型的学习教程
字典是python语言中唯一的映射类型,用花括号{}表示,一个字典条目就是一个键值对,方法keys()返回字典的键列表,values()返回字典的值列表,items()返回字典的键值对列表。字典中的值没有任何限制,它们可以是任意python对象,但字典中的键是有类型限制的,每个键只能对应一个值,且键必须是可哈系的,所有不可变类型都是可哈希的。不可变集合frozenset的元素可作为字典的键,但可变集合set就不行了。
以下是字典类型的常用方法。
clear():删除字典中所有元素。
copy():返回字典(浅复制)的一个副本。
fromkeys(seq,val=None):创建并返回一个新字典,以seq中的元素做该字典的键,val做该字典中所有键对应的初始值。
get(key,default=None):返回字典中的键key对应的值value,如果字典中不存在此键,则返回default的值。
has_key(key):如果键key在字典中存在,返回True,否则返回False。python2.2后这个方法几乎已废弃不用了,通常用in来替代。
items():返回一个包含字典中键值对元组的列表。
keys():返回一个包含字典中键的列表。
iter():方法iteritems()、iterkeys()、itervalues()与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表。
pop(key[,default]):和方法get()类似,如果字典中key键存在,删除并返回dict[key],如果key键不存在,且没有给出default的值,引发KeyError异常。
setdefault(key,default=None):和方法get()相似,如果字典中不存在key键,由dict[key]=default为它赋值。
update(dict2):将字典dict2的键值对添加到当前字典中。
values():返回一个包含字典中所有值的列表。
键可以是多种类型,但键是唯一的不重复的,值可以不唯一
>>> d = {'a':1, 'b':2}
>>> d
{'b': 2, 'a': 1}
>>> L = [('Jonh',18), ('Nancy',19)]
>>> d = dict(L) #通过包含键值的列表创建
>>> d
{'Jonh': 18, 'Nancy': 19}
>>> T = tuple(L)
>>> T
(('Jonh', 18), ('Nancy', 19))
>>> d = dict(T) #通过包含键值的元组创建
>>> d
{'Jonh': 18, 'Nancy': 19}
>>> d = dict(x = 1, y = 3) #通过关键字参数创建
>>> d
{'x': 1, 'y': 3}
>>> d[3] = 'z'
>>> d
{3: 'z', 'x': 1, 'y': 3}
还有一个创建字典的方法就是 fromkeys(S [ , v]) python里的解释是 New dict with key from S and value equal to v ,即将S里的元素作为键,v作为所有键的值,v 的默认值为 None。可以通过已存在的字典 d 调用 d.fromkeys(S [, v] ) 也可以通过类型调用 dict.fromkeys( S [, v] )
>>> d
{3: 'z', 'y': 3}
>>> L1 = [1,2,3]
>>> d.fromkeys(L1)
{1: None, 2: None, 3: None}
>>> {}.fromkeys(L1,'nothing')
{1: 'nothing', 2: 'nothing', 3: 'nothing'}
>>> dict.fromkeys(L1,'over')
{1: 'over', 2: 'over', 3: 'over'}
字典是无序的,所以不能通过索引来获取值,要通过键来找到关联值。对于不存在的键,会出现错误KeyError
>>> d
{3: 'z', 'x': 1, 'y': 3}
>>> d[3]
'z'
>>> d['x']
1
>>> d[0]
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
d[0]
KeyError: 0
字典操作和方法:
len( d ) 返回字典d里面的键值对数目
x in d 查询字典d中是否有键 x
>>> d = {'x':1,'y':3}
>>> len(d)
2
>>> 'x' in d
True
>>> 'z' not in d
True
d [ x ] = y 若键 x 存在,则修改 x 对应的值为 y, 若键 x 不存在,则在字典 d 中增加键值对 x : y
>>> d
{'x': 1, 'y': 3}
>>> d['x'] = 1.5
>>> d
{'x': 1.5, 'y': 3}
>>> d['z'] = 5
>>> d
{'z': 5, 'x': 1.5, 'y': 3}
del d[x] 删除字典 d 中键为 x 的键值对,若 x 不存在会出现 KeyError
>>> d = {'z': 5, 'x': 1.5, 'y': 3}
>>> del d['x']
>>> d
{'z': 5, 'y': 3}
>>> del d['x']
Traceback (most recent call last):
File "<pyshell#66>", line 1, in <module>
del d['x']
KeyError: 'x'
d.clear() 清空字典d
d.copy() 对字典 d 进行浅复制,返回一个和d有相同键值对的新字典
>>> d
{'z': 5, 'y': 3}
>>> d.copy()
{'z': 5, 'y': 3}
d.get( x [ , y]) 返回字典 d 中键 x 对应的值,键 x 不存在的时候返回 y, y 的默认值为None
>>> d = {'z': 5, 'x': 1.5, 'y': 3}
>>> d.get('x')
1.5
>>> del d['x']
>>> d.get('x')
>>> d.get('x','nothing')
'nothing'
d.items() 将字典 d 中所有键值对以dict_items的形式返回(Python 2中d.iteritems() 返回一个针对键值对的迭代器对象,Python 3中没有 iteritems 方法了)
>>> d = {'z': 5, 'x': 1.5, 'y': 3}
>>> d.items()
dict_items([('z', 5), ('x', 1.5), ('y', 3)])
>>> list(d.items())
[('z', 5), ('x', 1.5), ('y', 3)]
d.keys() 将字典 d 中所有的键以dict_keys形式返回(Python 2 中d.iterkeys() 返回一个针对键的迭代器对象,Python 3 没有此语法)
>>> d.keys()
dict_keys(['z', 'x', 'y'])
>>> for x in d.keys():
print(x)
z
x
y
d.pop( x ) 返回给定键 x 对应的值,并将该键值对从字典中删除
>>> d = {'z': 5, 'x': 1.5, 'y': 3}
>>> d.pop('x')
1.5
>>> d.pop('x')
Traceback (most recent call last):
File "<pyshell#92>", line 1, in <module>
d.pop('x')
KeyError: 'x'
d.popitem( ) 返回并删除字典 d 中随机的键值对
>>> d = {'z': 5, 'x': 1.5, 'y': 3}
>>> d.popitem()
('z', 5)
>>> d.popitem()
('x', 1.5)
d.setdefault( x, [ , y ] ) 返回字典 d 中键 x 对应的值,若键 x 不存在,则返回 y, 并将 x : y 作为键值对添加到字典中,y 的默认值为 None
>>> d = {'z': 5, 'x': 1.5, 'y': 3}
>>> d.setdefault('x')
1.5
>>> del d['x']
>>> d.setdefault('x','Look!')
'Look!'
>>> d
{'z': 5, 'x': 'Look!', 'y': 3}
d.update( x ) 将字典 x 所有键值对添加到字典 d 中(不重复,重复的键值对用字典 x 中的键值对替代字典 d 中)
>>> d1 = {'x':1, 'y':3}
>>> d2 = {'x':2, 'z':1.4}
>>> d1.update(d2)
>>> d1
{'z': 1.4, 'x': 2, 'y': 3}
d.values( ) 将字典里所有的值以dict_values 的形式返回(Python 2 中d.itervalues() 返回针对字典d里所有值的迭代器对象,Python 3无此语法)
>>> d1
{'z': 1.4, 'x': 2, 'y': 3}
>>> d1.values()
dict_values([1.4, 2, 3])
>>> list(d1.values())
[1.4, 2, 3]
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
指标体系是企业数字化分析、业务监控、经营决策的核心基础框架,是将零散数据转化为可衡量、可对比、可落地业务价值的关键体系。 ...
2026-10-08随着市场竞争日趋饱和,同质化低价竞争逐渐陷入内卷僵局,传统以价格、渠道、促销为核心的营销模式边际效益持续递减。在此背景下 ...
2026-10-08 很多数据分析师画过趋势图、做过业绩预测,但当被问到“这个月销售额增长20%,到底是长期趋势自然增长,还是促销活动的短期 ...
2026-10-08你有没有想过,手机里点外卖、刷社交软件、转一笔账,背后到底是谁在替你"记着账"? 答案其实很简单:数据库,以及跟它对话的那 ...
2026-10-07CDA数据分析师 出品 作者:李诗怡 一、数据分析四大思维 1. 对比思维:没有对比就没有分析 核心观点:单独一个数字没有意义,有 ...
2026-10-05Kimball 是方法,星型模型是它产出的形状。 很多人把"Kimball vs 星型模型"当成一道选择题——这本身就是个误会:Kimball 是动词 ...
2026-10-05写在开头 老板在微信上甩来一句: "帮我看下为什么销量跌了。" ” 你回工位,打开 SQL,开始写。查订单表、拉近三个月、按 ...
2026-10-03CDA数据分析师 出品 作者:李诗怡 1. 事实表 vs 维度表 对比维度 事实表 维度表 核心问题 记录“业务发生了什么事” 描述 ...
2026-10-02做数据聚合时,PySpark的groupBy()确实能完成统计,这也是它的本职工作。但它有一个根本性局限:每一组数据,最终只能返回一行 ...
2026-10-01热力地图是数据可视化中极具辨识度与实用性的空间分析图表,结合地理空间维度与数据密度特征,通过颜色深浅、色阶渐变直观展示数 ...
2026-09-30 很多数据分析师做过按月份的销售额趋势图,画过按天的流量折线图,但当被问到“时间序列和普通数据有什么本质区别”“季节性 ...
2026-09-30同样是“银行数据岗”,在国有大行总行数据中心、在一家城商行的零售部、在银行系金融科技子公司、在保险公司,工作内容、成长节 ...
2026-09-29在数据分析与统计学研究中,数据往往不是独立存在的,不同变量之间普遍存在相互关联、相互影响的关系。相关性统计分析是挖掘变量 ...
2026-09-29 导读:大多数人只把 dataclasses 当成偷懒工具,用来少写 __init__、__repr__ 这类魔法方法。但它的能力远不止于此。本文带 ...
2026-09-29 很多数据分析师能熟练地计算指标、搭建标签体系,但当被问到“画像到底在解决什么问题”“画像和标签是什么关系”“画像如何 ...
2026-09-29在MySQL数据库运维与业务开发中,行业普遍存在“数据达到千万级就必须分表”的说法。但在实际生产环境中,千万条数据并不是强制 ...
2026-09-28CDA数据分析师 出品 作者:李诗怡 1. 5W1H 分析法 定义:经典系统性思维框架,通过六个核心维度对问题进行全方位拆解与剖析,确 ...
2026-09-28 很多分析师在设计标签时思路清晰,但真到落地环节却面临“数据在手,不知如何转化为可用标签”的困境:或因加工方式选择不当 ...
2026-09-28CDA数据分析师 出品 作者:李诗怡 1. 用户标签体系 定义: 通过一系列高度精炼的特征标识,对用户属性、行为与偏好进行量化刻画 ...
2026-09-24Pandas是Python生态中用于表格数据处理的核心库,广泛应用于数据清洗、统计运算、报表输出、数据分析建模等场景。在处理极大数值 ...
2026-09-24