Python中的字典(dict)与列表、元组都不同,它不是序列,而是一种映射(mapping)。映射是一个其他对象的集合,但是它们是使用键-值(key-value)来存储对象,具有极快的查找速度。字典是另一种可变容器模型,且可存储任意类型对象,同列表一样,可以就地改变并随着需求增大或减小。字典的每个键值对(key=>value)用冒号(:)分割,每对之间用逗号(,)分割,整个字典包括在花括号({})中 ,语法格式如下:
d = {key1 : value1, key2 : value2 }
列表中通过“下表数字”来找到对应的对象。字典中通过“键对象”找到对应的“值对象”。“键”是任意的不可变数据,比如:整数、浮点数、字符串、元组。但是,列表、字典、集合这些可变对象,不能作为“键”。并且“键”不可重复。“值”可以是任意的数据,并且可以重复。
a = {} # {}
b = dict() # {}
c = {'name': 'Python', 'age': 18, 'role': 'computer language'} # {'name':'Python', 'age':18, 'role': 'computer language'}
d = dict(name = 'Python', age = 18, role= 'computer language') # {'name':'Python', 'age':18, 'role': 'computer language'}
e = dict([('name', 'Python'), ('age', 18), ('role', 'computer language')]) # {'name':'Python', 'age':18, 'role': 'computer language'}
list1 = ['name', 'age', 'role']
list2 = ['Python', 18, 'computer language']
dict1 = dict(zip(list1, list2)) # {'name':'Python', 'age':18, 'role': 'computer language'}
a = dict.fromkeys((),) # {} fromkeys里面需要传递的1~2个参数,第一个参数为键,第二参数为值(值不传递则为空)。当传递一个参数时,这个参数可以是字符串、列表、元组,若为空则生成空字典,否则生成值为空的字典;
b = dict.fromkeys('123') # {'123': None}
c = dict.fromkeys(['123']) # {'123': None}
d = dict.fromkeys(['name', 'age', 'role']) # {'name': None, 'age': None, 'role': None}
e = dict.fromkeys(['name', 'age', 'role'], 1) # {'name': 1, 'age': 1, 'role': 1}
f = dict.fromkeys(['name', 'age', 'role'], [1, 2, 3]) # {'name': [1, 2, 3], 'age': [1, 2, 3], 'role': [1, 2, 3]}
dict1 = {'name': 'Python', 'age': 18, 'role': 'computer language'}
dict1['name'] # Python
dict1['age'] # 18
dict1['role'] # computer language
使用这种方法来访问字典时,如果键不存在,会抛出异常,如:
dict1['job']
Traceback (most recent call last):
File "", line 1, in
KeyError: 'job'
因此可以使用get方法来获取值
dict1 = {'name': 'Python', 'age': 18, 'role': 'computer language'}
dict1.get('name') # Python
dict1.get('age') # 18
dict1.get('role') # computer language
dict1.get('job') # None
给字典新增“键值对”。如果“键”已经存在,则覆盖旧的键值对;如果“键”不存在,则新增“键值对”。
dict1 = {'name': 'Python', 'age': 18, 'role': 'computer language'}
dict1['object'] = 'everybody' # object的键不存在,则新增
dict1['age'] = 20 # age的键存在,则修改
print(dict1) # {'name': 'Python', 'age': 20, 'role': 'computer language', 'object': 'everybody'}
update 方法可以用一个字典中的元素更新另外一个字典。该方法接收一个参数。该参数表示用作更新数据的字典数据源。如果被更新的字典key 有重复,则直接覆盖。
dict1 = {'name': 'Python', 'age': 18, 'role': 'computer language'}
dict2 = {'name': 'c', 'potentiality': 1000, 'sex': 'male'}
dict1.update(dict2)
print(dict1) # {'name': 'c', 'age': 18, 'role': 'computer language', 'potentiality': 1000, 'sex': 'male'}
字典中元素的删除,可以使用 del()方法;或者 clear()删除所有键值对;pop()删除指定键值对,并返回对应的“值对象”。
dict1 = {'name': 'Python', 'age': 18, 'role': 'computer language'}
del(dict1['name'])
print(dict1) # {'age': 18, 'role': 'computer language'}
a = dict1.pop('role')
print(a) # computer language
dict1.clear()
print(dict1) # {}
popitem()方法用于随机删除和返回该键值对。字典是“无序可变序列”,因此没有第一个元素、最后一个元素的概念;popitem 弹出随机的项,因为字典并没有"最后的元素"或者其他有关顺序的概念。若想一个接一个地移除并处理项,这个方法就非常有效(因为不用首先获取键的列表)
dict1 = {'name': 'Python', 'age': 18, 'role': 'computer language'}
print(dict1.popitem()) # ('role', 'computer language')
print(dict1.popitem()) # ('age', 18)
print(dict1.popitem()) # ('name', 'Python')
items 方法用于返回字典中所有的 key-value 对。获得的每一个 key-value 对用一个元组表示。items 方法返回的值是一个被称为字典视图的特殊类型,可以被用于迭代(如使用在for 循环中)。keys 方法用于返回字典中所有的 key,返回值类型与 items 方法类似,可以用于迭代。values 方法用于以迭代器形式返回字典中值的列表。
dict1 = {'name': 'Python', 'age': 18, 'role': 'computer language'}
print(dict1.items()) # dict_items([('name', 'Python'), ('age', 18), ('role', 'computer language')])
print(dict1.keys()) # dict_keys(['name', 'age', 'role'])
print(dict1.values()) # dict_values(['Python', 18, 'computer language'])
# 使用keys来遍历字典获取value值
for key in dict1.keys():
print(key, ':', dict1.get(key))
# name : Python
# age : 18
# role : computer language