【Python基础014】字典的用法

1、定义

        Python中的字典(dict)与列表、元组都不同,它不是序列,而是一种映射(mapping)。映射是一个其他对象的集合,但是它们是使用键-值(key-value)来存储对象,具有极快的查找速度。字典是另一种可变容器模型,且可存储任意类型对象,同列表一样,可以就地改变并随着需求增大或减小。字典的每个键值对(key=>value)用冒号(:)分割,每对之间用逗号(,)分割,整个字典包括在花括号({})中 ,语法格式如下:

d = {key1 : value1, key2 : value2 }

        列表中通过“下表数字”来找到对应的对象。字典中通过“键对象”找到对应的“值对象”。“键”是任意的不可变数据,比如:整数、浮点数、字符串、元组。但是,列表、字典、集合这些可变对象,不能作为“键”。并且“键”不可重复。“值”可以是任意的数据,并且可以重复。

2、创建

        (1)通过{}、dict()创建

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'}

        (2)通过zip()创建

list1 = ['name', 'age', 'role']

list2 = ['Python', 18, 'computer language']

dict1 = dict(zip(list1, list2)) # {'name':'Python', 'age':18, 'role': 'computer language'}

        (3)通过formkeys创建值为空的字典

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]}

3、访问

        (1)使用“键”来获得“值”

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方法来获取值

        (2)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

4、常见操作

        (1)添加、修改字典

        给字典新增“键值对”。如果“键”已经存在,则覆盖旧的键值对;如果“键”不存在,则新增“键值对”。

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'}

        (2)更新字典

        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'}

        (3)删除元素

        字典中元素的删除,可以使用 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')

5、items方法、keys方法和values方法

        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

你可能感兴趣的:(Python基础,python,开发语言)