从字面上看,字典就像生活中的字典。它具有如下特征:
- 字典和列表一样,也能够存储多个数据。
- 列表中找某个元素时,是根据下标进行的。
- 字典中找某个元素时,是根据’名字’(就是冒号:前面的那个值,例如上面代码中的’name’、’id’、’sex’)。
- 字典的每个元素由2部分组成,键:值。例如 ‘name’:’班长’ ,’name’为键,’班长’为值。
Python字典是一种可变容器模型,且可存储任意类型对象,它使用键-值(key-value)存储,具有极快的查找速度。
字典使用花短号 {}
声明。
字典可以包含多个元素,元素之间使用逗号 ,
分割。
每个元素由两部分构成,一般称为“键值对” 。
每个键值对的“键”与“值”由冒号分割,其形式为 key1:value1
。
如下为Python 中字典结构的完整形式。注意其中的“键”与“值”都得有有效的 Python 表达式, 而且 “键” 得是不可变的量。
d = {key1 : value1, key2 : value2 }
字典的名称指出了这种数据结构的用途。 普通图书适合按从头到尾的顺序阅读,如愿意可快速翻到任何一页,这有点像Python中的列表。 字典旨在以“键”作为索引,获取其值。例如:
phonebook={'Cecil':'3158','Osgeo':6298}
phonebook['Osgeo']
6298
myCat = {'size': 'fat', 'color': 'gray', 'disposition': 'loud'}
myCat['size']
'fat'
myCat['size']
'fat'
'My cat has '+ myCat['color']+' fur.'
'My cat has gray fur.'
字典可以用整数值作为键,但它们不必从 0
开始,可以是任何数字。
spam = {12345: 'Luggage Combination', 42: 'The Answer'}
字典中的表项是不排序的,它没有“第一个”表项,也不能像列表那样切片。在字典中,键-值对输入的顺序并不重要。
spam = ['cats','dogs','moose']
bacon = ['dogs','moose', 'cats']
spam == bacon
False
eggs = {'name': 'Zophie', 'species': 'cat', 'age':'8'}
ham = {'species': 'cat', 'age': '8', 'name': 'Zophie'}
eggs == ham
True
尝试访问字典中不存在的键,将导致 KeyError
出错信息。例如:
spam={'name': 'Zophie', 'age':7}
# spam['color'] #此代码会报错
spam = {'color': 'red', 'age': 42}
for v in spam.values():
print(v)
red 42
for k in spam.keys():
print(k)
color age
for i in spam.items():
print(i)
('color', 'red') ('age', 42)
注意: items()
方法返回的 dict_items
值中,包含的是键和值的元组。如果希望得到一个真正的列表,就把类似列表的返回值传递给 list
函数。
spam = {'color': 'red', 'age': 42}
spam.keys()
dict_keys(['color', 'age'])
list(spam.keys())
['color', 'age']
也可以利用多重赋值的技巧,在for
循环中将键和值赋给不同的变量。例如:
spam = {'color': 'red', 'age': 42}
for k, v in spam.items():
print('Key: ' + k +' Value: ' + str(v))
Key: color Value: red Key: age Value: 42
spam = {'name': 'Zophie', 'age': 7}
'name' in spam.keys()
True
'Zophie' in spam.values()
True
'color' in spam.keys()
False
'color' in spam
本质上是一个简写版本。相当于 'color' in spam.keys()
。
'color' in spam
False
picnicltems = {'apples':5, 'cups':2}
'I am bringing ' + str(picnicltems.get('cups', 0)) + ' cups.'
'I am bringing 2 cups.'
'I am bringing ' + str(picnicltems.get( 'eggs ', 0)) + ' eggs.'
'I am bringing 0 eggs.'
通常需要为字典中某个键设置一个默认值,当该键没有任何值时使用它。例如:
spam = {'name':'Pooka','age': 5}
if 'color' not in spam:
spam['color'] = 'black'
spam
{'name': 'Pooka', 'age': 5, 'color': 'black'}
如果键不存在于字典中,setdefault()
函数将会添加键并将值设为默认值。如果该键确实存在,方法就会返回键的值。
spam = { 'name ': 'Pooka', 'age' : 5}
spam.setdefault('color', 'black')
'black'
spam
{'name ': 'Pooka', 'age': 5, 'color': 'black'}
spam.setdefault('color','white')
'black'
spam
{'name ': 'Pooka', 'age': 5, 'color': 'black'}
dict = {'Name': 'osgeo', 'Age': 7, 'Class': 'First'}
更新 Age
:
dict['Age'] = 8;
添加信息:
dict['School'] = "python教程"
最后打印看一下结果:
print ("dict['Age']: ", dict['Age'])
dict['Age']: 8
print ("dict['School']: ", dict['School'])
dict['School']: python教程
print (dict)
{'Name': 'osgeo', 'Age': 8, 'Class': 'First', 'School': 'python教程'}
dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
删除键 'Name'
del dict['Name']
删除字典
dict.clear()
删除字典
del dict #
执行 del
操作后字典不再存在,再次引用元素会引发一个异常:
print ("dict['Age']: ", dict['Age'])
dict['Age']: dict['Age']
print ("dict['School']: ", dict['School'])
dict['School']: dict['School']
- 不允许同一个键出现两次。
dict = {'Name': 'osgeo', 'Age': 7, 'Name': '地理信息'}
创建时如果同一个键被赋值两次,后一个值会被记住
print ("dict['Name']: ", dict['Name'])
dict['Name']: 地理信息
- 键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行,出现错误,例如:
# dict = {['Name']: 'Runoob', 'Age': 7} #此代码会报错
print ("dict['Name']: ", dict['Name'])
dict['Name']: 地理信息
dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
len(dict)
3
str(dict)
输出字典,以可打印的字符串表示。
dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
str(dict)
"{'Name': 'Runoob', 'Age': 7, 'Class': 'First'}"
type(variable)
返回输入的变量类型,如果变量是字典就返回字典类型。
dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
type(dict)
dict