Python——字典

本文详细介绍了Python中字典的数据结构特点、创建与使用方法、基本操作以及内置函数和方法等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 字典的特点

  • 列表是对象的有序集合,而字典是无序集。
  • 对于列表(其他复合数据类型也一样)来说,元素只有值;而对于字典,元素由 key:value 对的形式组成。
  • 字典中的元素通过 key 来访问,而非通过他们的位置来访问(主要区别)。
  • 字典是一个关联数组(也称为哈希),其中的任何 key 都与 value 相关联(或映射),所以字典是无序的 key:value 对。
  • value 可以是 Python 中的任何数据类型,key 必须不可变,可以用数字、字符串或元组充当。不能用列表。
  • 字典不支持序列数据类型(例如:字符串、元组和列表)的序列操作(例如:索引、切片、连接 +、重复 *),字典属于内置映射类型,同时也是该类型的唯一代表!

 

二. 创建和使用字典

 

1. 创建字典

语法格式如下:

                  d = {key1:value1, key2:value2}

  • 字典由多个键及其对应的值构成的对(把键 / 值对称为项)。
  • 将所有项(元素)放在花括号({})内,每个项之间以逗号(,)分隔,键值对用冒号(:)分隔。
  • 空字典(不包括任何项)由两个大括号组成,如{}。
  • 字典中的 key 必须是唯一的,但值不一定。
  • 值可以取任何数据类型;键必须不可变,可以用数字、字符串或元组充当,不能用列表。
  • key 重复时,虽然没有报错,但前面的值被后面的覆盖了
>>>
>>> dic = {}                                    # 空字典
>>> dic
{}
>>>
>>> dic = {1:'Python', 2:'C++'}                 # key 是整形
>>>
>>>
>>> dic = {'name':'python', 2:[1, 2, 3]}        # key 是混合类型
>>>
>>> dic = dict([(1,'Python'), (2,'C++')])       # 使用 dict() 函数
>>> dic
{1: 'Python', 2: 'C++'}
>>>
>>> dic = {'name':'python', (1, 2):'C++'}       # 具有不可变元素的元组
>>>
>>> {'name':'python', [1, 2]:'C++'}             # 列表
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>>
>>> {'name':'Python', 'name':'C++'}             # key 重复
{'name': 'C++'}
>>> #虽然没有报错,但前面的值被后面的覆盖了
...
>>>

 

2. 访问字典元素

字典通过 key 来检索 value,有两种方式:

  • 在方括号([])内使用 key
  • key 与 get() 方法与一起使用

区别在于:使用 get(),如果没有找到 key,则返回 None,而不是 KeyError。

>>> dict0 = {'name':'zth','age':20}
>>>
>>>
>>> dict0['name']
'zth'
>>>
>>> dict0.get('age')
20
>>>
>>> dict0['zth']                # 没有找到 key,引发 KeyError
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'zth'
>>>
>>> print(dict0.get(20))                # 没有找到 key,返回默认值
None

 

3. dict()  函数

dict() 函数用于创建一个字典。

语法

class dict(**kwarg)
class dict(mapping, **kwarg)
class dict(iterable, **kwarg)

参数说明:

  • **kwargs -- 关键字
  • mapping -- 元素的容器。
  • iterable -- 可迭代对象。

返回值

返回一个字典。

>>>dict()                        # 创建空字典
{}
>>> dict(a='a', b='b', t='t')     # 传入关键字
{'a': 'a', 'b': 'b', 't': 't'}
>>> dict(zip(['one', 'two', 'three'], [1, 2, 3]))   # 映射函数方式来构造字典
{'three': 3, 'two': 2, 'one': 1} 
>>> dict([('one', 1), ('two', 2), ('three', 3)])    # 可迭代对象方式来构造字典
{'three': 3, 'two': 2, 'one': 1}

 

三. 字典的基本操作

 

1. 更改或添加元素

字典是可变的,可以添加新元素,也可以使用赋值运算符(=)更改现有元素的值。

如果 key 存在,value 将被更新;否则,新的 key:value 对会被添加到字典中。

>>> dict0 = {}
>>>
>>>
>>> dict0['name'] = 'zth'               # 添加项
>>> dict0
{'name': 'zth'}
>>>
>>> dict0['aeg'] = 21                   # 添加项
>>> dict0
{'name': 'zth', 'aeg': 21}
>>>
>>> dict0['aeg'] = 20                   # 更新
>>> dict0
{'name': 'zth', 'aeg': 20}

 

2. 删除字典或字典的项

通过使用 pop() 方法,可以删除指定 key 对应的元素,并返回其 value。

popitem() 方法可以用来删除并返回一个任意元素 (key, value)。

使用 del 关键字来删除单个元素或整个字典本身。

clear() 方法则会一次性删除所有元素。

>>> dict0 = {'name': 'zth', 'age': 20, 'sex':'M', 'grade':None}
>>>
>>>
>>> dict0.pop('grade')                          # 删除某一项
>>> dict0
{'name': 'zth', 'age': 20, 'sex': 'M'}
>>>
>>> dict0.popitem()                             # 删除任意一项
('sex', 'M')
>>> dict0
{'name': 'zth', 'age': 20}
>>>
>>>
>>> del dict0['age']                            # 删除某一项
>>> dict0
{'name': 'zth'}
>>>
>>> dict0.clear()                               # 清空 - 删除所有项
>>> dict0
{}
>>>
>>>
>>> del dict0                                   # 删除字典
>>> dict0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'dict0' is not defined

 

3. 成员测试

可以测试一个 key 是否存在于字典中,使用关键字 in。

注意: 成员测试仅适用于 key,不适用于 value。

>>> dict0 = {'name': 'zth', 'aeg': 20, 'sex':'M'}
>>>
>>> 'name' in  dict0
True
>>>
>>> 'grade' in dict0
False
>>>
>>> 'zth' in  dict0             # 不能检测 value
False
>>>

 

4. 遍历字典

使用 for 循环,可以遍历字典中的每个 key。

>>> dict0 = {'name': 'zth', 'aeg': 20, 'sex':'M'}
>>>
>>>
>>> for key in dict0:
...     print(key)
...
name
aeg
sex

 

5. 字典内置函数

 

函数描述
all()如果字典的所有 key 都是 True(或者字典为空),返回 True。
any()用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True。
len()返回字典的长度(元素个数)
sorted()返回一个新的排序字典(不排序字典本身)
str(dict)输出字典,以可打印的字符串表示。
type()返回输入的变量类型,如果变量是字典就返回字典类型。
>>> dict0 = {'name': 'zth', 'aeg': 20, 'sex':'M'}
>>>
>>> all(dict0)
True
>>>
>>> all({'name': 'zth', 0:20})
False
>>>
>>>
>>> any({'name': 'zth', 0:20})
True
>>>
>>> any({():23, 0:20})
False
>>>
>>>
>>> len(dict0)
3
>>> sorted(dict0)
['aeg', 'name', 'sex']
>>>
>>> str(dict0)
"{'name': 'zth', 'aeg': 20, 'sex': 'M'}"
>>>
>>>
>>> type(dict0)
<class 'dict'>

6. 字典的格式化字符串

字典的格式化方式是在每个转化说明符中的 % 字符后加上用圆括号括起来的键,再跟上其他说明元素。

>>> dict0 = {'name': 'zth', 'aeg': 20, 'sex':'M'}
>>>
>>> print('姓名: %(name)s'%dict0)
姓名: zth

 

四. 字典方法

1. clear() 方法

clear() 函数用于删除字典内所有元素。

clear()方法语法:

dict.clear()
  • 参数: 无。
  • 返回值: 该函数没有任何返回值。

 

2. copy()

 

Python 字典 copy() 函数返回一个字典的浅复制。

copy()方法语法:

  dict.copy()

  • 参数: 无。

  • 返回值: 返回一个字典的浅复制。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
dict1 =  {'user':'zth','num':[1,2,3]}
 
dict2 = dict1          # 浅拷贝: 引用对象
dict3 = dict1.copy()   # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
 
# 修改 data 数据
dict1['user']='root'
dict1['num'].remove(1)
 
# 输出结果
print(dict1)
print(dict2)
print(dict3)
print('\n\n')

dict3['user'] = 'fbb'

print('dict1: ',dict1)
print('dict3: ',dict3)
print('\n\n')

dict3['num'].remove(2)

print('dict1: ',dict1)
print('dict3: ',dict3)
print('\n\n')

print('dict2: ',dict2)

执行结果:

pydev debugger: starting (pid: 1432)
{'user': 'root', 'num': [2, 3]}
{'user': 'root', 'num': [2, 3]}
{'user': 'zth', 'num': [2, 3]}



dict1:  {'user': 'root', 'num': [2, 3]}
dict3:  {'user': 'fbb', 'num': [2, 3]}



dict1:  {'user': 'root', 'num': [3]}
dict3:  {'user': 'fbb', 'num': [3]}



dict2:  {'user': 'root', 'num': [3]}
  • 赋值:浅拷贝, 引用对象。
  • copy:浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
  • 替换副本的值时,原始字典不受影响。
  • 如果修改了副本某个值(原地修改,不是替换),原始字典就会改变,因为同样的值也在原字典中。

 

3. fromkeys()

fromkeys() 函数用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值。

fromkeys()方法语法:

   dict.fromkeys(seq[, value])

参数

  • seq -- 字典键值列表。
  • value -- 可选参数, 设置键序列(seq)的值。

返回值

该方法返回列表。

>>> seq = ( 'name','age','sex')
>>>
>>> dict1 = dict.fromkeys(seq)
>>> dict1
{'name': None, 'age': None, 'sex': None}
>>>
>>>
>>> dict1 = dict.fromkeys(seq,10)
>>>
>>> dict1
{'name': 10, 'age': 10, 'sex': 10}

 

4. get()

get() 函数返回指定键的值,如果值不在字典中返回默认值。

get()方法语法:

      dict.get(key, default=None)

参数

  • key -- 字典中要查找的键。
  • default -- 如果指定键的值不存在时,返回该默认值值。

返回值

返回指定键的值,如果值不在字典中返回默认值 None。

>>> dict1 = {'Name': 'zth', 'Age': 20}
>>>
>>> print(dict1.get('Name'))
zth
>>>
>>> print(dict1.get('sex'))
None
>>>
>>> print(dict1.get('sex','未指定'))
未指定

 

5.  key in dict  方法

 in 操作符用于判断键是否存在于字典中,如果键在字典 dict 里返回 true,否则返回 false。

语法

in 操作符语法:

key in dict

参数

  • key -- 要在字典中查找的键。

返回值

如果键在字典里返回true,否则返回false。

>>> student={'小萌': '1001', '小智': '1002'}
>>> print('小萌在student字典中:%s'%('小萌' in student))
小萌在student字典中:True
>>> print('小强在student字典中:%s'%('小强' in student))
小强在student字典中:False

 

6. items()

 items() 方法以列表返回可遍历的(键, 值) 元组数组。

items()方法语法:

    dict.items()

  • 参数: 无
  • 返回值: 返回可遍历的(键, 值) 元组数组。
>>> dict0 = {'name': 'zth', 'aeg': 20}
>>>
>>> dict0.items()
dict_items([('name', 'zth'), ('aeg', 20)])

 

7. keys()

Python3 字典 keys() 方法返回一个迭代器,可以使用 list() 来转换为列表。

注意:Python2.x 是直接返回列表

keys()方法语法:

  dict.keys()

  • 参数: 无
  • 返回值: 返回一个迭代器。
>>> dict0 = {'name': 'zth', 'aeg': 20}
>>>
>>> dict0.keys()
dict_keys(['name', 'aeg'])
>>>
>>>
>>> list(dict0.keys())
['name', 'aeg']

 

8. setdefault()

setdefault() 方法和get()方法类似,用于获得与给定键相关联的值。 如果键不存在于字典中,将会添加键并将值设为默认值。

setdefault()方法语法:

  dict.setdefault(key, default=None)

参数

  • key -- 查找的键值。
  • default -- 键不存在时,设置的默认键值。

返回值

如果 key 在 字典中,返回对应的值。如果不在字典中,则插入 key 及设置的默认值 default,并返回 default ,default 默认值为 None。

>>> dict0 = {'name': 'zth', 'aeg': 20}
>>>
>>> dict0.setdefault('name')
'zth'
>>>
>>> dict0.setdefault('sex')
>>> print( dict0.setdefault('sex'))
None
>>>
>>> print( dict0.setdefault('sex','M'))
None
>>>
>>> print( dict0.setdefault('grade','86'))
86
>>> dict0
{'name': 'zth', 'aeg': 20, 'sex': None, 'grade': '86'}

 

9. update()

update() 函数把字典参数 dict2 的 key/value(键/值) 对更新到字典 dict 里。

update() 方法语法:

dict.update(dict2)
  • 参数:dict2 -- 添加到指定字典dict里的字典。
  • 返回值:该方法没有任何返回值。

 

10. vaules()

values() 方法返回一个迭代器,可以使用 list() 来转换为列表,列表为字典中的所有值。

values()方法语法:

  dict.values()

  • 参数: 无
  • 返回值: 返回迭代器。
>>> dict0 = {'name': 'zth', 'aeg': 20}
>>>
>>> dict0.values()
dict_values(['zth', 20])
>>>
>>>
>>> list(dict0.values())
['zth', 20]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值