字典 Dictionary¶
在Python中,字典(Dictionary)是一种无序的、可变的数据类型,用于存储键-值(key-value)对的集合。字典是通过键来索引和访问值的,而不是通过位置。
字典 dictionary ,在一些编程语言中也称为 hash , map ,是一种由键值对组成的数据结构。
基本操作¶
python
用{}
或者dict()
来创建声明一个空字典
d = {} type(d)Out[2]:
dictIn [7]:
d = dict() type(d)Out[7]:
dictIn [8]:
# {}初始化一个字典 b = {'one':10,'two':2,'name':'wang'} bOut[8]:
{'one': 10, 'two': 2, 'name': 'wang'}In [10]:
# dict()初始化一个字典 b = dict( [('foozelator', 123), ('frombicator', 18), ('spatzleblock', 34), ('snitzelhogen', 23) ]) bOut[10]:
{'foozelator': 123, 'frombicator': 18, 'spatzleblock': 34, 'snitzelhogen': 23}
新增值¶
In [4]:d['name'] = 'dog' d['age'] = 20 dOut[4]:
{'name': 'dog', 'age': 20}
查看键值¶
In [5]:d['name']Out[5]:
'dog'
修改值¶
In [6]:d['name'] = 'xiao ming' dOut[6]:
{'name': 'xiao ming', 'age': 20}
字典是没有顺序的,因此,Python中不能用支持用数字索引按顺序查看字典中的值,而且数字本身也有可能成为键值,这样会引起混淆:
In [9]:# 报错 d[0]
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) Cell In[9], line 1 ----> 1 d[0] KeyError: 0
字典的键类型¶
出于hash的目的,Python中要求这些键值对的键必须是不可变的,而值可以是任意的Python对象。
In [11]:# 字典中的数组 d = {} d['mutable'] = ['changeable', 'variable', 'varying', 'fluctuating', 'shifting', 'inconsistent', 'unpredictable', 'inconstant', 'fickle', 'uneven', 'unstable', 'protean'] d['immutable'] = ['fixed', 'set', 'rigid', 'inflexible', 'permanent', 'established', 'carved in stone'] dOut[11]:
{'mutable': ['changeable', 'variable', 'varying', 'fluctuating', 'shifting', 'inconsistent', 'unpredictable', 'inconstant', 'fickle', 'uneven', 'unstable', 'protean'], 'immutable': ['fixed', 'set', 'rigid', 'inflexible', 'permanent', 'established', 'carved in stone']}In [13]:
# 定义4个字典 e1 = {'mag': 0.05, 'width': 20, 'name':'dog'} e2 = {'mag': 0.04, 'width': 25} e3 = {'mag': 0.05, 'width': 80} e4 = {'mag': 0.03, 'width': 30} events = {1:e1, 2:e2, 3:e3, 4:e4} eventsOut[13]:
{1: {'mag': 0.05, 'width': 20, 'name': 'dog'}, 2: {'mag': 0.04, 'width': 25}, 3: {'mag': 0.05, 'width': 80}, 4: {'mag': 0.03, 'width': 30}}
有时候,也可以使用元组作为键值,例如,可以用元组做键来表示从第一个城市飞往第二个城市航班数的多少:
In [22]:connections = {} connections[('New York', 'Seattle')] = 100 connections[('Austin', 'New York')] = 200 connections[('New York', 'Austin')] = 400 print(connections[('New York', 'Seattle')]) print(connections[('Austin', 'New York')])
100 200
字典的方法¶
get()方法¶
用索引可以找到一个键对应的值,但是如果键不存在,python会报错,这个时候就可以使用get()方法来处理这种情况,使用如下:
d.get(key, default = None)
d = {'one':'a','two':2} d['three']
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) Cell In[23], line 2 1 d = {'one':'a','two':2} ----> 2 d['three'] KeyError: 'three'In [25]:
print(d.get('three'))
NoneIn [29]:
print(d.get('three', 3))
3
pop()方法¶
pop
方法可以弹出字典中某个键对应的值,同时也可以指定默认参数:
dict.pop(key, default=None)
删除并返回字典中key对应的值,如果没有这个key,则返回指定的默认值
In [36]:d = {'one':'a','two':2} d.pop('one') print(d)
{'two': 2}In [37]:
d.pop('three', 3)Out[37]:
3In [38]:
# 与列表一样,del 函数可以用来删除字典中特定的键值对,例如: del d['two'] print(d)
{}
update()方法更新字典¶
可以通过索引来插入、修改单个键值对,但是如果想对多个键值对进行操作,这种方法就显得比较麻烦,好在有 update 方法:
dict.update(newd)
person = {'first':'jm', 'last':'tom', 'born':'1990'} print(person) person.update({'first':'xiaoming', 'born':'2014'}) print(person)
{'first': 'jm', 'last': 'tom', 'born': '1990'} {'first': 'xiaoming', 'last': 'tom', 'born': '2014'}
in查询字典中是否存在该键¶
In [41]:person = {'first':'jm', 'last':'tom', 'born':'1990'} 'first' in personOut[41]:
TrueIn [42]:
'name' in personOut[42]:
False
keys()、values()和items()方法¶
d.keys()
返回一个由所有键组成的列表;
d.values()
返回一个由所有值组成的列表;
d.items()
返回一个由所有键值对元组组成的列表;
person= {'first':'jm', 'last':'tom', 'born':'1990'} person.keys()Out[43]:
dict_keys(['first', 'last', 'born'])In [44]:
person.values()Out[44]:
dict_values(['jm', 'tom', '1990'])In [45]:
person.items()Out[45]:
dict_items([('first', 'jm'), ('last', 'tom'), ('born', '1990')])
源码下载:
链接:https://pan.baidu.com/s/1UAKVxkmPWafse8Yq5tYKQA
提取码:upxl