python的字典(dict)属于映射类型,是数据的无序集合,字典内的元素都是key:value形式的键值对,所有键值对存储在一对大花括号{}中,每一个键值对之间使用逗号分隔。
{'name': '小明', 'age': 14}
字典的key不允许重复,如果向字典中插入重复的key,新的value会替换旧的value。
当数值类型做为字典的key时遵循数字比较的一般规则,如果数值相等则视为同一个key,例如1 和 1.0 ,他们使用比较运算符 == 进行比较时是相等的,但考虑到计算机对浮点型数据存储的是近似值,因此用float类型数据做字典的key是不明智的。
此外,尽量避免使用bool类型对象做字典的key,bool类型是int类型的子类,True与1在python中是相等的,因此下面的字典看似定义了两个key:value对,实际只有一个
int_dict = {
1: '1做key',
True: 'True做key'
}
print(int_dict) # {1: 'True做key'}
后定义的True: 'True做key' 覆盖了之前定义的1: '1做key'。
任意类型的对象都可以做python字典的value,但只有可hash的对象才能做字典的key,像列表,字典,集合都不是可hash的对象,因此他们不能做字典的key。判断是一个对象是否可hash,可以使用内置函数hash,如果对象是可hash的,hash函数就能够返回对象的hash值,若不可hash则会抛出TypeError异常。
使用一对大括号{} ,可以创建一个空字典,字典里没有任何元素。
empty_dict = {}
在{}里添加key:value对,可以创建非空的字典
contacts_dict = {
"小王": '13892339876',
"小张": '13898320987',
"小李": '13890348745'
}
字典中元素的个数是3,一个key:value对算是一项元素,这个字典里的key和value都是字符串类型,想要获得字典里元素的个数,需要使用内置函数len
print(len(contacts_dict)) # 3
dict函数的语法如下
class dict(**kwarg)
class dict(mapping, **kwarg)
class dict(iterable, **kwarg)
参数说明:
dict函数返回一个新的字典,下面是使用示例
传入一个字典
>>> new_dict = dict({'name': '小明', 'age': 14})
>>> new_dict
{'name': '小明', 'age': 14}
传入关键字参数
>>> new_dict = dict(name='小明', age=14)
>>> new_dict
{'name': '小明', 'age': 14}
传入可迭代对象
>>> new_dict = dict([('name', '小明'), ('age', 14)])
>>> new_dict
{'name': '小明', 'age': 14}
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
score_dict['小丽'] = 100
通过对字典的一个key进行赋值可以向字典中插入新的key:value对,字典在使用key时,必须要用中括号[]紧跟在字典后面,在中括号里填写key的值,这种方式被称为索引方式。
修改字典里某个key所对应的value值,写法与向字典里新增key:value对是相同的,都需要通过使用[]的索引方式进行。
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
score_dict['小明'] = 100
print(score_dict)
在定义字典score_dict时,已经有一个key的值是'小明', score_dict['小明'] = 100 会修改'小明' 所对应的value,print语句最终输出的结果
{
'小明': 100,
'小刚': 98,
'小红': 94
}
稍作总结,当使用如下的语法时
dict[key] = value
如果key已经存在,那么这行代码的作用就是在修改key所对应的value,如果key不存在,这行代码的作用就是向字典里插入一个新的key:value对。
删除字典里的某个key:value,可以使用del关键字。
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
del score_dict['小明']
print(score_dict) # {'小刚': 98, '小红': 94}
此外,也可以使用字典的pop方法
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
score_dict.pop('小明')
print(score_dict) # {'小刚': 98, '小红': 94}
不论是del还是pop方法,都需要指明要删除哪个key,如果想要删除全部的元素,则可以使用clear方法,clear会清空字典里所有的元素。
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
score_dict.clear()
print(score_dict) # {}
执行clear方法后,score_dict变为一个空字典。
上小学时我们都有过查字典的经历,我们想要知道一个汉字在字典里的哪一页,可以通过拼音音节索引来查找,拼音音节就相当于python字典里的key,音节所对应的页数就相当于python字典里的value。
任何时候,我们对字典里的元素的访问,修改,删除,都必须通过key来进行。
想要获取某个特定的key所对应的value值,可以通过dict[key] 这种语法来实现
score_dict = {
'小明': 99,
'小刚': 98,
'小红': 94
}
print(score_dict['小红']) # 94
需要特别指出的是,通过key获取value时,如果key不存在,会引发KeyError异常
print(score_dict['小丽'])
字典中并没有'小丽'这个key,因此这样代码会引发异常
Traceback (most recent call last):
File "/Users/kwsy/PycharmProjects/pythonclass/mytest/demo.py", line 7, in <module>
print(score_dict['小丽'])
KeyError: '小丽'
KeyError表示不存在'小丽'这个key
遍历字典的key与value是常见的操作,写法很多,下面两种写法都能够实现对字典的遍历。
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
for key in score_dict:
print(key, score_dict[key])
这种for循环写法会遍历字典的key,通过key获得所对应的value,另外一种写法是通过字典的items方法来同时遍历字典的key与value
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
for key, value in score_dict.items():
print(key, value)
两种写法最终输出的结果一致
小明 96
小刚 98
小红 94
方法 | 功能作用 |
---|---|
clear() | 删除字典内所有的元素 |
copy() | 返回字典的浅复制 |
fromkeys() | 以指定key创建一个新的字典 |
get() | 返回指定key的值 |
items() | 成对返回所有key和value |
keys() | 返回字典所有的key |
values | 返回字典所有value |
setdefault() | 为key设置对应的默认值 |
update() | 更新字典 |
pop() | 删除键值对 |
QQ交流群: 211426309