python字典类型可迭代_Python核心知识系列:字典

本文详细介绍了Python字典的创建方法,包括直接定义、使用dict()构造函数、fromkeys()方法和字典推导。讨论了字典的基本操作,如访问、修改、删除元素,以及利用get()、setdefault()和update()函数。还涵盖了字典的遍历、排序、统计元素个数以及避免KeyError的方法。最后,探讨了collections模块中的defaultdict、OrderedDict、ChainMap和Counter类,以及字典的并集、差集、最大值键和一键对多值字典的实现。
摘要由CSDN通过智能技术生成

1 定义

字典是一种映射对象类型,由键值对构成的一个可变容器。字典中的每个键值对内用冒号 ( : ) 分隔,键值对间用逗号 ( , ) 分隔,所有键值对包括在{}中。字典的键必须是唯一的,只有可散列的数据类型才能用作这些映射里的键,而值则不必是唯一的。可散列数据类型:一个对象是可散列的,那么在它的生命周期中它的hash值是不变的。Python所有内置的不可变的对象都是可散列的(hashable),如数字、字符串等;可变的容器(比如list或dict)不是hashable;对于元组,只有它包含的所有元素都是可散列类型的情况下,它才是可散列的。

# 判断对象是不是可散列数据类型

t = (1, 2, 3)

hash(t) # 有hash值

t = (1, 2, [1, 2])

hash(t) # TypeError: unhashable type: 'list'

创建字典的方法:根据定义创建:使用一对中括号 {},键值对中间用冒号,每项间使用逗号分隔。

d = {} # 空字典

d = {'a':1, 'b':2, 'c':3}使用dict()构造函数

# 键值对

d1 = dict({'name':'Tom', 'age':'18', 'gender':'male'})

# 关键字参数

d2 = dict('name'='Tom', 'age'='18', 'gender'='male')

# 元素为元组或列表的元组、元素为元组或列表的列表

d3 = dict([(name', 'Tom'), ('age', '18'), ('gender', 'male')])

# zip(seq1, seq2)

seq1 = ['name', 'age', 'gender']

seq2 = ['Tom', '18', 'male']

d4 = dict(zip(seq1, seq2))fromkeys() 方法

"""用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值。语法:dict.fromkeys(seq, value)参数:seq为字典键值列表,value为键序列对应的值,默认为None。返回值:返回一个新的字典。"""

seq = ['a', 'b', 'c']

value = [1, 2]

d1 = dict.fromkeys(seq, value)

d2 = {}.fromkeys(seq, value)

d3 = {'A':1, 'B':2}.fromkeys(seq, value)

print(d1) # {'a': [1, 2], 'b': [1, 2], 'c': [1, 2]}

print(d2) # {'a': [1, 2], 'b': [1, 2], 'c': [1, 2]}

print(d3) # {'a': [1, 2], 'b': [1, 2], 'c': [1, 2]}字典推导构建新字典

字典推导可以从任何以键值对作为元素的可迭代对象中构建出字典。

# 利用元组列表生成字典

lt = [('a', 1), ('b', 2), ('c', 3)]

d = {key: value for key, value in lt} # {'a': 1, 'b': 2, 'c': 3}

# 利用一个字典生成另一个字典

d1 = {key.upper(): value for key, value in d.items()} # {'A': 1, 'B': 2, 'C': 3}

2 基本操作

2.1 访问字典根据字典的键来访问字典,如果不存在,则会抛出异常。

d = {'name':'Tom', 'age':'18', 'gender':'male'}

d['name'] # Tom

d['nationality'] # 报异常 KeyError: 'nationality'使用get()函数访问字典,如果键不存在,返回默认值,而不会报错。

"""语法:dict.get(key, default=None)参数:key为要查找的键,default为键不存在时返回的默认值。返回:返回指定键的值,若不存在,则返回默认值default,default默认为None。"""

d = {'name':'Tom', 'age':'18', 'gender':'male'}

d.get('nationality', 'Chinese') # Chinese

2.2 修改字典

2.2.1 更新字典元素

# 更新指定键对应的值

d = {'name':'Tom', 'age':'18', 'gender':'male'}

d['name'] = 'Henry'

print(d)

Out:

{'name': 'Henry', 'age': '18', 'gender': 'male'}

2.2.2 添加字典元素

d = {'name':'Tom', 'age':'18', 'gender':'male'}

d['nationality'] = 'Chinese' # 添加元素

print(d)

Out:

{'name': 'Tom', 'age': '18', 'gender': 'male', 'nationality': 'Chinese'}

2.2.3 setdefault()添加元素

与get()方法类似,如果key在字典中,返回对应的值,不修改已存在的键对应值。如果key不在字典中,则插入key及设置的默认值default,并返回 default,default默认值为None。

"""语法:dict.setdefault(key, default=None)参数:key为要添加的键&#

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值