作者:billy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
字典
字典(dictionary)和列表类似,也是可变序列,不过与列表不同,它是无序的可变序列。保存的内容以 “键-值对” 的形式存放。这类似于《新华字典》,他可以把拼音和汉字关联起来,通过音节表可以快速找到想要的汉字。其中,音节相当于键(key),而对应的汉字相当于值(value),键是唯一的,而值可以有多个。
Python 中的字典相当于 Java 或 C++ 中的 Map 对象
字典的特征:
- 通过键来读取,而不是通过索引;
- 字典是任意对象的无需集合;
- 字典是可变的,并且可以任意嵌套;
- 字典中的键必须唯一;
- 字典中的键必须不可变;
- 字典的创建和删除
定义字典时,每个元素都包含两个部分 - “键” 和 “值”,并且在 “键” 和 “值” 之间使用冒号分隔,相邻两个元素使用逗号分隔,所有元素在一个大括号 “{}” 中。语法格式如下:
dictionary = {'key1':'value1', 'key2':'value2', ..., 'keyn':'valuen'}
和列表、元组一样,也可以创建空的字典:dictionary = {}
这里介绍一下 zip() 函数,其作用是将多个列表或元组对应位置的元素组合成为元组,并返回包含这些内容的 zip 对象。如果 list1 与 list2 长度不同,则取最短的列表的长度。
Python 中创建字典还可以使用 dict() 方法,可以通过已有数据快速创建字典。
示例:
name = ('绮梦', '冷伊一', '香凝', '黛兰')
sign = ['水瓶座', '射手座', '双鱼座', '双子座']
dictionary1 = dict( 绮梦 = '水瓶座', 冷伊一 = '射手座' ) # 通过给定 "键-值对" 创建字典
dictionary2 = dict( zip(name, sign) ) # 通过 zip 对象创建字典
dictionary3 = dict.fromkeys(name) # 通过 fromkeys 创建值为空的字典
dictionary4 = {name: sign} # 通过元组为键、列表为值创建字典
print(dictionary1)
print(dictionary2)
print(dictionary3)
print(dictionary4)
上述例子的运行结果为:
{'绮梦': '水瓶座', '冷伊一': '射手座'}
{'绮梦': '水瓶座', '冷伊一': '射手座', '香凝': '双鱼座', '黛兰': '双子座'}
{'绮梦': None, '冷伊一': None, '香凝': None, '黛兰': None}
{('绮梦', '冷伊一', '香凝', '黛兰'): ['水瓶座', '射手座', '双鱼座', '双子座']}
同列表和元组一样,不再需要的字典也可以使用 del 命令删除:del dictionary
如果只是想删除字典的所有元素,可以使用字典对象的 clear() 方法。执行 clear() 方法之后,原字典将变成空字典:dictionary.clear()
- 访问字典
Python 中输出字典,可以直接使用 print() 函数。但是在使用字典时,很少直接输出它的内容,一般需要根据指定的键得到相应的结果。
示例:
name = ('绮梦', '冷伊一', '香凝', '黛兰')
sign = ['水瓶座', '射手座', '双鱼座', '双子座']
dictionary = dict( zip(name, sign) )
print(dictionary)
print(dictionary['香凝'])
print("我的星座是:", dictionary['大魔王'] if '大魔王' in dictionary else "字典里找不到我的星座")
上述例子的运行结果为:
{'绮梦': '水瓶座', '冷伊一': '射手座', '香凝': '双鱼座', '黛兰': '双子座'}
双鱼座
我的星座是: 字典里找不到我的星座
在实际开发中,很可能我们是不知道当前字典中存在什么键,如果指定的键不存在则会出现异常。为了避免异常,可以使用 if 语句对不存在的情况进行处理。
另外,Python 中推荐的方法是使用字典对象的 get() 方法获取指定键的值,语法如下:
dictionary.get(key[,default])
dictionary:字典对象;
key:指定的键;
default:可选项,用于当指定的键不存在时,返回一个默认值,如果省略则返回 None;
示例:
name = ('绮梦', '冷伊一', '香凝', '黛兰')
sign = ['水瓶座', '射手座', '双鱼座', '双子座']
dictionary = dict( zip(name, sign) )
print(dictionary)
print(dictionary.get('大魔王'))
print(dictionary.get('大魔王', '字典里没有大魔王'))
上述例子的运行结果为:
{'绮梦': '水瓶座', '冷伊一': '射手座', '香凝': '双鱼座', '黛兰': '双子座'}
None
字典里没有大魔王
- 遍历字典
Python 中提供了 items() 方法来获取字典的 “键-值对” 列表,还有 keys() 方法获取 “键” 列表、values() 方法获取 “值” 列表。然后通过循环来遍历列表中的值。
示例:
dictionary = {'姓名':'billy', '年龄':'18', '爱好':'烫头'}
verse = dictionary.items()
print(verse)
for item in dictionary.keys():
print(item, end=' ')
print('')
for item in dictionary.values():
print(item, end=' ')
print('')
for key,value in dictionary.items():
print(key, ":", value)
上述例子的运行结果为:
dict_items([('姓名', 'billy'), ('年龄', '18'), ('爱好', '烫头')])
姓名 年龄 爱好
billy 18 烫头
姓名 : billy
年龄 : 18
爱好 : 烫头
- 添加、修改和删除字典
字典是可变序列,可以随时在其中添加 “键-值对”,语法如下:
dictionary[key] = value
由于在字典中,“键” 必须是唯一的,所以如果添加的新元素的 “键” 已经存在,那么它将不会添加新的元素,而是替换原来该 “键” 的值,这也相当于修改字典的元素。
示例:
dictionary = {'姓名':'billy', '年龄':'18', '爱好':'烫头'}
print(dictionary.items())
dictionary['体重'] = '75kg'
print(dictionary.items())
dictionary['体重'] = '80kg'
print(dictionary.items())
上述例子的运行结果为:
dict_items([('姓名', 'billy'), ('年龄', '18'), ('爱好', '烫头')])
dict_items([('姓名', 'billy'), ('年龄', '18'), ('爱好', '烫头'), ('体重', '75kg')])
dict_items([('姓名', 'billy'), ('年龄', '18'), ('爱好', '烫头'), ('体重', '80kg')])
当字典中的某个元素不需要时,可以使用 del 命令将其删除。需要注意的是,如果删除的 “键-值对” 不存在与字典中则会出现异常,所以在删除之前需要先判断其是否在字典中。
示例:
name = ('绮梦', '冷伊一', '香凝', '黛兰')
sign = ['水瓶座', '射手座', '双鱼座', '双子座']
dictionary = dict(zip(name, sign))
if '冷烟萧' in dictionary:
del dictionary['冷烟萧']
print(dictionary)
if '冷伊一' in dictionary:
del dictionary['冷伊一']
print(dictionary)
上述例子的运行结果为:
{'绮梦': '水瓶座', '冷伊一': '射手座', '香凝': '双鱼座', '黛兰': '双子座'}
{'绮梦': '水瓶座', '香凝': '双鱼座', '黛兰': '双子座'}
- 字典推导式
使用字典推导式可以快速生成一个字典,它的表现形式和列表推导式类似。
示例1:
import random
dictionary = {i:random.randint(10, 100) for i in range(10)}
print("生成的字典为:", dictionary)
上述例子的运行结果为:生成的字典为: {0: 74, 1: 80, 2: 36, 3: 45, 4: 19, 5: 93, 6: 42, 7: 85, 8: 93, 9: 51}
示例2:
name = ('绮梦', '冷伊一', '香凝', '黛兰')
sign = ['水瓶', '射手', '双鱼', '双子']
dictionary = {i:j+'座' for i,j in zip(name, sign)}
print(dictionary)
上述例子的运行结果为:生成的字典为: {'绮梦': '水瓶座', '冷伊一': '射手座', '香凝': '双鱼座', '黛兰': '双子座'}
集合
Python 中的集合(set)与数学中的集合概念类似,也是用于保存不重复的元素。它有可变集合(set)和不可变集合(frozenset)两种。本章节介绍的 set 集合是无序可变的,另一种暂不做介绍。集合最好的应用就是去重,因为集合中的每个元素都是唯一的。
- 创建集合
Python 中可以直接使用 “{}” 来创建集合,但需要注意的是,大括号中必须要有值,因为直接使用一对大括号 “{}” 在 Python 中表示的是创建一个空的字典。
示例:
set1 = {'绮梦', '冷伊一', '香凝', '黛兰'}
set2 = {1, 2, 3, 1, 2, 7, 5, 8, 6, 4, 8}
set3 = {'Python', 28, (5, 6, 7)}
print(set1)
print(set2)
print(set3)
上述例子的运行结果为:
{'绮梦', '冷伊一', '香凝', '黛兰'}
{1, 2, 3, 4, 5, 6, 7, 8}
{(5, 6, 7), 'Python', 28}
由于 Python 中 set 集合是无序的,所以输出时元素的排列顺序可能与上面不同,这个不必在意
除了直接使用大括号创建,还可以使用 set() 函数将列表、元组等其他可迭代对象转换为集合。
示例:
set1 = set("命运给与我们的不是失望之酒,而是机会之杯。")
set2 = set([1, 2, 3, 4, 5, 6])
set3 = set(("人生苦短", "我用 Python"))
print(set1)
print(set2)
print(set3)
上述例子的运行结果为:
{'会', '的', '机', '杯', '不', '失', '望', '。', ',', '而', '们', '我', '酒', '给', '是', '命', '之', '运', '与'}
{1, 2, 3, 4, 5, 6}
{'我用 Python', '人生苦短'}
- 向集合中添加和删除元素
集合是可变的,所以在创建集合之后,还可以对其进行添加或删除操作。
向集合中添加元素可以使用 add() 方法实现。注意,要添加的元素,只能使用字符串、数字及布尔类型等,不能使用列表、元组等可迭代对象。
示例:
gather = set(["渔舟唱晚", "高山流水", "出水莲", "汉宫秋月", 28, 1.414, 'abc'])
print(gather)
gather.add("我是一直小小鸟")
print(gather)
上述例子的运行结果为:
{1.414, '渔舟唱晚', '高山流水', 'abc', '汉宫秋月', 28, '出水莲'}
{1.414, '渔舟唱晚', '高山流水', 'abc', '我是一直小小鸟', '汉宫秋月', 28, '出水莲'}
在 Python 中,可以使用 del 命令删除整个集合,也可以使用集合的 pop() 方法或者 remove() 方法删除一个元素,或者使用 clear() 方法清空集合,使其变成一个空的集合。
示例:
gather = set(["渔舟唱晚", "高山流水", "出水莲", "汉宫秋月", 28, 1.414, 'abc'])
print(gather)
gather.pop()
print(gather)
if 'abc' in gather:
gather.remove('abc')
print(gather)
gather.clear()
print(gather)
上述例子的运行结果为:
{'高山流水', '汉宫秋月', 1.414, '渔舟唱晚', 'abc', 28, '出水莲'}
{'汉宫秋月', 1.414, '渔舟唱晚', 'abc', 28, '出水莲'}
{'汉宫秋月', 1.414, '渔舟唱晚', 28, '出水莲'}
set()
- 集合的交集、并集和差集运算
集合最常用的操作就是进行交集、并集、差集和对称差集运算。进行交集运算时使用 “&” 符号;进行并集运算时使用 “|” 符号;进行差集运算时使用 “-” 符号;进行对称差集运算时使用 “^” 符号。
示例:
python = set(['绮梦', '冷伊一', '香凝', '盺轩'])
c = set(['冷伊一', '凌宇', '盺轩', '盛博'])
print("选择 Python 语言的学生有:", python)
print("选择 C 语言的学生有:", c)
print("交集运算:", python & c)
print("并集运算:", python | c)
print("差集运算:", python - c)
上述例子的运行结果为:
选择 Python 语言的学生有: {'香凝', '盺轩', '绮梦', '冷伊一'}
选择 C 语言的学生有: {'盺轩', '凌宇', '冷伊一', '盛博'}
交集运算: {'冷伊一', '盺轩'}
并集运算: {'香凝', '盛博', '绮梦', '冷伊一', '凌宇', '盺轩'}
差集运算: {'香凝', '绮梦'}