Python 字典(Dict)的元素放置于大括号“{}” 内,是一种“键”(Key)与“值”(Value)对应的数据类型。
字典跟列表、元组序列类型有一个很大的不同点,就是字典中的键是不具有顺序性的。由于键没有顺序性,因此适用于序列类型的切片运算在字典中就无法使用。
字典的元素放置于大括号 “{}”内,每一个元素都是一个键值对,语法如下。
字典名称={key1:value1, key2:value2, key3:value3 …}
例如下面的代码。
dic = {'length':4, 'width':8, 'height':12}
在上述代码中,“length”“width”“height”是字典中字符串数据类型的键,而值是一种数值。
又例如下面的代码:
dic={'name':'www.cdsy.xyz', 'author': '城东书院', 'publisher':'网站'}
print(dic['name'])
print(dic['author'])
print(dic['publisher'])
上面的程序代码中共有 3 个元素,我们只要利用每一个元素的键就可以读出其所代表的值。
输出结果:
www.cdsy.xyz
城东书院
网站
要修改字典的元素值,必须针对键设定新值才能取代原先的旧值,例如下面的代码:
dic={'name':'www.cdsy.xyz', 'author': '城东书院', 'publisher':'网站'}
dic['name']= '编程语言学习第一站' #将字典中的"'name'"键的值修改为'编程语言学习第一站'
print(dic)
输出结果:
{'name': '编程语言学习第一站', 'author': '城东书院', 'publisher':'网站'}
我们还可以直接往字典中加入新的键值对,例如下面的代码:
dic={'name': '编程语言学习第一站', 'author': '城东书院', 'publisher':'网站'}
dic['price']= 580 #在字典中新增"'price'",该键的值为580
print(dic)
输出结果:
{'name': '编程语言学习第一站', 'author': '城东书院', 'publisher': '网站', 'price': 580}
另外,字典中的键必须唯一,而值可以是相同值。字典中如果有相同的键却被设定了不同的值,则只有最后面的键所对应的值有效,前面的键将被覆盖。
例如以下的示例中,字典中的 'nation' 键被设定了两个不同的值,前面那一个被设定为'美国',后面那一个被设定为'中国',所以前面会被后面那一个设定值'中国'所覆盖。代码如下:
dic={'name':'Peter Anderson', 'age':18, 'nation':'美国','nation':'中国'} #设定字典
print(dic['nation']) #会输出中国
如果要删除字典中的特定元素,语法如下。
del 字典名称[键]
例如下面的代码。
del dic['age']
如果想删除整个字典,则可以使用 del 语句,其语法如下。
del字典名称
例如下面的代码。
del dic
具体的例子如下列代码所示:
english ={'春':'Spring', '夏':'Summer', '秋':'Fall', '冬':'Winter'} #字典内容
del english['秋'] #删除字典中指定的键值对
print(english)
del english #删除整个字典
输出结果:
{'春': 'Spring', '夏': 'Summer', '冬': 'Winter'}
下面介绍与 Python 字典操作相关的常用函数。
clear() 函数会清空整个字典,这个函数和前面提到的del语句的不同点是它会清空字典中所有的元素,但是字典仍然存在,只不过变成空的字典。但是 del 语句则会将整个字典删除,字典一经删除,就不存在了。
以下例子将示范如何使用 clear() 函数。
dic={'name': 'www.cdsy.xyz', 'author': '城东书院', 'publisher':'网站'}
dic.clear()
print(dic)
输出结果:
{}
copy() 函数可以复制整个字典,以达到数据备份的目的,复制后所得到的新字典会和原先的字典在存储器中占据不同的地址,两者的内容不会相互影响,例如下面的代码。
dic1={"title":"www.cdsy.xyz", "year":2012, "author":"城东书院"}
dic2=dic1.copy()
print(dic2)#新字典dic2和dic1的内容一致
dic2["title"]="编程语言学习第一站!"#修改新字典dic2的内容
print(dic2)#新字典dic2的内容已和原字典dic1的内容不一致
print(dic1)#原字典的内容不会受到新字典dic2内容更改的影响
输出结果:
{'title': 'www.cdsy.xyz', 'year': 2012, 'author': '城东书院'}
{'title': '编程语言学习第一站!', 'year': 2012, 'author': '城东书院'}
{'title': 'www.cdsy.xyz', 'year': 2012, 'author': '城东书院'}
get() 函数会用键查找对应的值,但是如果该键不存在则会返回默认值,没有默认值就返回 None,格式如下。
v1=dict.get(key[, default=None] )
例如下面的代码:
dic1={"title":"www.cdsy.xyz", "year":2012, "author":"城东书院"}
owner=dic1.get("author")
print(owner) #输出城东书院
如果指定的键不存在,会返回 default 值(也就是 None)。也可以改变 default 值,那么当键不存在时,就会输出所设定的值,例如下面的代码。
dic1={"title":"www.cdsy.xyz", "year":2012, "author":"城东书院"}
owner=dic1.get("color")
print(owner) #输出None
owner=dic1.get("color","橙色图标")
print(owner) #输出橙色图标
pop() 函数可以移除指定的元素,例如下面的代码:
dic1={"title":"www.cdsy.xyz", "year":2012, "author":"城东书院"}
dic1.pop("title")
print(dic1) #输出 {'year': 2012, 'author': '城东书院'}
输出结果:
{'year': 2012, 'author': '城东书院'}
update() 函数可以将两个字典合并,格式如下。
dict1.update(dict2)
dict1 会与 dict2 字典合并,如果有重复的值,括号内字典 dict2 的元素会取代字典 dict1 的元素,例如下面的代码:
dic1={"title":"www.cdsy.xyz", "year":2012, "author":"城东书院"}
dic2={"color":"橙色图标", "year":'公元2021年'}
dic1.update(dic2)
print(dic1)
输出结果:
{'title': 'www.cdsy.xyz', 'year': '公元2021年', 'author': '城东书院', 'color': '橙色图标'}
items() 函数用来获取字典的所有项,以列表方式返回。keys() 与 values() 这两个函数分别取字典的 key 或 value。例如下面的代码。
dic1={"title":"www.cdsy.xyz", "year":2012, "author":"城东书院"}
print(dic1. items())
print(dic1. keys())
print(dic1.values())
输出结果:
dict_items([('title', 'www.cdsy.xyz'), ('year', 2012), ('author', '城东书院')])
dict_keys(['title', 'year', 'author'])
dict_values(['www.cdsy.xyz', 2012, '城东书院'])
【示例1】以下程序示例是各种字典函数的综合运用。Python 代码如下:
labor = {'高中仁':'RD', '许富强':'SA'} #设定字典的数据
labor['陈月风'] = 'CEO' #新增一个元素
labor.setdefault('陈月风')
print('目前字典:')
print(labor)
labor['陈月风'] ='PRESIDENT'
#用update()函数更新字典
labor.update({'周慧宏':'RD', '郑大富':'SA'})
print('按照名字递增排序:')
for key in sorted(labor):
print('%8s %9s' % (key, labor[key]))
person = {'陈志强':'SA','蔡工元':'RD'}
labor.update(person) # 更新字典
labor.update(胡慧兰 = 'RD', 周大全 = 'SA')#以指派方式更新
print('更新字典内容:\n', labor)
labor.pop('陈志强')#删除指定数据
print('删除后按照名字排序:')
for value in sorted(labor, reverse = False):
print('%8s %9s' % (value, labor[value]))
print('将字典内容清空:')
print(labor.clear())
print(labor)#输出字典
输出结果:
目前字典:
{'高中仁': 'RD', '许富强': 'SA', '陈月风': 'CEO'}
按照名字递增排序:
周慧宏 RD
许富强 SA
郑大富 SA
陈月风 PRESIDENT
高中仁 RD
更新字典内容:
{'高中仁': 'RD', '许富强': 'SA', '陈月风': 'PRESIDENT', '周慧宏': 'RD', '郑大富': 'SA', '陈志强': 'SA', '蔡工元': 'RD', '胡慧兰': 'RD', '周大全': 'SA'}
删除后按照名字排序:
周大全 SA
周慧宏 RD
胡慧兰 RD
蔡工元 RD
许富强 SA
郑大富 SA
陈月风 PRESIDENT
高中仁 RD
将字典内容清空:
None
{}
程序解说: