Python 字典

  • 字典的创建和删除
  • 赋值创建字典
  • 创建空字典
  • 通过映射函数创建字典
  • 通过给定的“键值对”创建字典
  • 删除字典
  • 通过“键值对”访问字典
  • 遍历字典
  • 添加、修改和删除字典元素
  • 字典推导式


字典的创建和删除

赋值创建字典

dictionary = {'张三':'爸爸', '李四':'哥哥', '王五':'儿子' }
print(dictionary)

运行结果:

{'张三': '爸爸', '李四': '哥哥', '王五': '儿子'}

创建空字典

dictionary = {}

或者

dictionary = dict()
print(dictionary)

运行结果:

{}

通过映射函数创建字典

语法如下:

dictionary = dict(zip(list1, list2))

参数说明:
zip() 函数:用于将多个列表或元组对应位置的元素组合为元组,并返回包含这些内容的 zip 对象

如下例所示:

name = ['张三', '李四', '王五']
sign = ['爸爸', '哥哥', '儿子']
dictionary = dict(zip(name,sign)) # zip() 返回的是一个 zip 对象,而不是元组
print(dictionary)

运行结果:

{'张三': '爸爸', '李四': '哥哥', '王五': '儿子'}

通过给定的“键值对”创建字典

dictionary = dict(张三 = '爸爸', 李四 = "哥哥", 王五 = "儿子" )
print(dictionary)

运行结果:

{'张三': '爸爸', '李四': '哥哥', '王五': '儿子'}

在 Python 中,还可以使用 dict 对象的 fromkeys() 方法创建 值为空 的字典

name_list = ['张三', '李四', '王五']
dictionary = dict.fromkeys(name_list)
print(dictionary)

运行结果:

{'张三': None, '李四': None, '王五': None}

另外,可以通过已经存在的元组和列表创建字典。

name_tuple = ('张三', '李四', '王五') # 键 不可变,需要是元组类型
sign = ['爸爸', '哥哥', '儿子']
dictionary = {name_list:sign} # 不可用 dict() 创建
print(dictionary)

运行结果:

{('张三', '李四', '王五'): ['爸爸', '哥哥', '儿子']}

删除字典

同列表和元组一样,不再需要的字典可以使用 del 命令删除整个字典

del dictionary

另外,如果只是想删除字典的全部元素,可以使用字典对象的 clear() 方法实现。执行 clear() 方法后,原字典将变为空字典。

dictionary.clear()

通过“键值对”访问字典

dictionary = {'张三':'爸爸', '李四':'哥哥', '王五':'儿子' }
print(dictionary) # 直接打印字典全部内容
print(dictionary["张三"] if "张三" in dictionary else "字典里没有这个人")
print(dictionary["赵六"] if "赵六" in dictionary else "字典里没有这个人") # 访问字典不存的键会报错,加入判断语句避免报错

运行结果:

{'张三': '爸爸', '李四': '哥哥', '王五': '儿子'}
爸爸
字典里没有这个人

推荐使用 get() 方法获取字典中指定键的值

dictionary = {'张三':'爸爸', '李四':'哥哥', '王五':'儿子' }
# get() 中第二个参数为默认值,当字典找不到指定对象时,会采用默认值
print(dictionary.get("张三", "字典中没有这个人"))
print(dictionary.get("赵六", "字典中没有这个人"))

运行结果:

爸爸
字典中没有这个人

遍历字典

字典是以“键值对”的形式存储数据的,所以在使用字典时需要获取到这些“键值对”。Python 提供了遍历字典的方法,通过遍历可以获取字典中的全部“键值对”。

使用字典对象的 items() 方法可以获取字典的“键值对”列表。语法格式如下:

dictionary.items()

其中,dictionary 对字典对象;返回值为可遍历的(“键值对”) 的元组列表。想要获取到具体的“键值对”,可以通过 for 循环遍历该元组列表。

例如,定义一个字典,通过 items() 方法获取“键值对”的元组列表,并输出全部“键值对”,代码如下:

dictionary = {'qq':'123456789' , 'name':'yusael', 'music':'can you hear'}
print(dictionary.items()) # 返回的是 “内容是元组的列表”
for items in dictionary.items():
    print(items)

运行结果:

dict_items([('qq', '123456789'), ('name', 'yusael'), ('music', 'can you hear')])
('qq', '123456789')
('name', 'yusael')
('music', 'can you hear')

上面的实例得到的是元组中的各个元素,如果想要获取到具体的每个键和值,可以使用下面的代码进行遍历:

dictionary = {'qq':'123456789' , 'name':'yusael', 'music':'can you hear'}
for key,value in dictionary.items():
    print("键是:", key, "值是:", value )

运行结果:

键是: qq 值是: 123456789
键是: name 值是: yusael
键是: music 值是: can you hear

可以通过 keys() 方法获取键的列表,通过 values() 方法获取值的列表:

dictionary = {'qq':'123456789' , 'name':'yusael', 'music':'can you hear'}
print(dictionary.keys())
print(dictionary.values())

运行结果:

dict_keys(['qq', 'name', 'music'])
dict_values(['123456789', 'yusael', 'can you hear'])

添加、修改和删除字典元素

由于字典是可变序列,所以可以随时在其中添加“键值对”,这和列表类似。

dictionary = {'张三':'爸爸', '李四':'哥哥', '王五':'儿子' }
dictionary["赵六"] = "爷爷" # 直接添加新的键值对
print(dictionary)

运行结果:

{'张三': '爸爸', '李四': '哥哥', '王五': '儿子', '赵六': '爷爷'}

由于在字典中,“键” 必须是唯一的,所以如果新添加元素的 “键” 与已经存在的 “键” 重复,将会使用新的 “值” 替换原来的值,这也相当于修改字典的元素

dictionary = {'张三':'爸爸', '李四':'哥哥', '王五':'儿子' }
dictionary["张三"] = "Father"
print(dictionary)

运行结果:

{'张三': 'Father', '李四': '哥哥', '王五': '儿子'}

当字典中的某一个元素不需要时,可以使用 del 命令 将其删除

dictionary = {'张三':'爸爸', '李四':'哥哥', '王五':'儿子' }
del dictionary["李四"]
print(dictionary)

运行结果:

{'张三': '爸爸', '王五': '儿子'}

注:当要删除的键不存在时,会抛出异常


字典推导式

使用字典推导式可以快速生成一个字典,它的表现形式与列表推导式类似。例如,我们可以使用下面的代码生成一个包含 4 个随机数的字典,其中字典的键使用数字表示:

import random
randomdict = {i:random.randint(10,100) for i in range(1,5)}
print(randomdict)

运行结果:

{1: 69, 2: 11, 3: 11, 4: 25}