Python 字典与集合

作者:billy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

字典

字典(dictionary)和列表类似,也是可变序列,不过与列表不同,它是无序的可变序列。保存的内容以 “键-值对” 的形式存放。这类似于《新华字典》,他可以把拼音和汉字关联起来,通过音节表可以快速找到想要的汉字。其中,音节相当于键(key),而对应的汉字相当于值(value),键是唯一的,而值可以有多个。

Python 中的字典相当于 Java 或 C++ 中的 Map 对象

字典的特征:

  • 通过键来读取,而不是通过索引;
  • 字典是任意对象的无需集合;
  • 字典是可变的,并且可以任意嵌套;
  • 字典中的键必须唯一;
  • 字典中的键必须不可变;
  1. 字典的创建和删除
    定义字典时,每个元素都包含两个部分 - “键” 和 “值”,并且在 “键” 和 “值” 之间使用冒号分隔,相邻两个元素使用逗号分隔,所有元素在一个大括号 “{}” 中。语法格式如下:
    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()

  1. 访问字典
    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
字典里没有大魔王
  1. 遍历字典
    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
爱好 : 烫头
  1. 添加、修改和删除字典
    字典是可变序列,可以随时在其中添加 “键-值对”,语法如下:
    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. 字典推导式
    使用字典推导式可以快速生成一个字典,它的表现形式和列表推导式类似。

示例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 集合是无序可变的,另一种暂不做介绍。集合最好的应用就是去重,因为集合中的每个元素都是唯一的

  1. 创建集合
    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', '人生苦短'}
  1. 向集合中添加和删除元素
    集合是可变的,所以在创建集合之后,还可以对其进行添加或删除操作。

向集合中添加元素可以使用 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()
  1. 集合的交集、并集和差集运算
    集合最常用的操作就是进行交集、并集、差集和对称差集运算。进行交集运算时使用 “&” 符号;进行并集运算时使用 “|” 符号;进行差集运算时使用 “-” 符号;进行对称差集运算时使用 “^” 符号。

示例:

python = set(['绮梦', '冷伊一', '香凝', '盺轩'])
c = set(['冷伊一', '凌宇', '盺轩', '盛博'])
print("选择 Python 语言的学生有:", python)
print("选择 C 语言的学生有:", c)
print("交集运算:", python & c)
print("并集运算:", python | c)
print("差集运算:", python - c)

上述例子的运行结果为:

选择 Python 语言的学生有: {'香凝', '盺轩', '绮梦', '冷伊一'}
选择 C 语言的学生有: {'盺轩', '凌宇', '冷伊一', '盛博'}
交集运算: {'冷伊一', '盺轩'}
并集运算: {'香凝', '盛博', '绮梦', '冷伊一', '凌宇', '盺轩'}
差集运算: {'香凝', '绮梦'}

更多请参考

  • 16
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值