字典(dict)
对于字典的学习,我整理了网上的一些资料,希望可以帮助到各位!!!
大家清楚知道,假设我们要保存一个人的信息,包括姓名、年龄、体重、单位地址、家庭住址、本人手机号、紧急联系人手机号等信息,你会发现我们之前学过的列表、元组和集合都不是最理想的选择。
集合肯定是最不合适的,因为集合有去重特性,如果一个人的年龄和体重相同,那么集合中就会少一项信息;同理,如果这个人的家庭住址和单位地址是相同的,那么集合中又会少一项信息。另一方面,虽然列表和元组可以把一个人的所有信息都保存下来,但是当你想要获取这个人的手机号时,你得先知道他的手机号是列表或元组中的第6个还是第7个元素;当你想获取一个人的家庭住址时,你还得知道家庭住址是列表或元组中的第几项。总之,在遇到上述的场景时,列表、元组、字典都不是最合适的选择,我们还需字典(dictionary)类型,这种数据类型最适合把相关联的信息组装到一起,并且可以帮助我们解决问题。
Python程序中的字典跟现实生活中的字典很像,它以键值对(键和值的组合)的方式把数据组织到一起,我们可以通过键找到与之对应的值并进行操作。就像《新华字典》中,每个字(键)都有与它对应的解释(值)一样,每个字和它的解释合在一起就是字典中的一个条目,而字典中通常包含了很多个这样的条目。
概念
列表和元组的使用缺点:当存储的数据要动态添加、删除的时候,我们一般使用列表,但是列表有时会遇到一些麻烦 解决方案:既能存储多个数据,还能在访问元素的很方便的定位到需要的元素,采用字典 语法: {键1: 值1, 键2: 值2, 键3: 值3, ..., 键n: 值n} 说明:键值对: key-value
- 字典和列表类似,都可以用来存储多个数据
- 在列表中查找某个元素时,是根据下标进行的;字典中找某个元素时,是根据'名字'(就是
- 冒号:前面的那个值,例如上面代码中的'name'、'id'、'sex')
使用场景:
- 字典中的每个元素都由2部分组成,键:值。例如 'name':'班长' ,'name'为键,'班长'为值
- 键可以使用数字、布尔值、元组,字符串等不可变数据类型,但是一般习惯使用字符串,切记不能使用列表等可变数据类型
- 每个字典里的key都是唯一的,如果出现了多个相同的key,后面的value会覆盖之前的value
- 列表更适合保存相似数据,比如多个商品、多个姓名、多个时间
- 字典更适合保存不同数据,比如一个商品的不同信息、一个人的不同信息
定义字典
# 1.定义空字典{}
dict1 = {}
print(type(dict1)) #
# 2.定义非空字典
# 第一种定义字典的方式
dict2 = {"name": "小王子", "age": 21, "love": "男", "sex": "**"} # 最常用
print(dict2) # {'name': '小王子', 'age': 21, 'love': '男', 'sex': '**'}
print(type(dict2)) #
print(dict2["name"], dict2["love"]) # 访问字典:小王子 男
# 第二种定义字典的方式dict(key=value,key1=value1,...)key表示键value表示值
dict3 = dict(num1="123", num2="987")
print(dict3) # {'num1': '123', 'num2': '987'}
# 第三种定义字典的方式
# dict(zip([key1,key2,key3....],[value1,value2,value3......]))#注意:key和value的数量不一致时,以数量少的为基准
dict4 = dict(zip(['n1', 'n2', 'n3'], [12, 34, 56]))
dict5 = dict(zip(['n1', 'n2', 'n3'], [12, 34, 56, 45, 67, 89]))
print(dict4) # {'n1': 12, 'n2': 34, 'n3': 56}
print(dict5) # {'n1': 12, 'n2': 34, 'n3': 56}
# 第四种方式:
dict6 = dict([("a", 10), ("b", "98"), ("c", 67), ("d", 34)])
print(dict6) # {'a': 10, 'b': '98', 'c': 67, 'd': 34}
?字典的操作
# 1.访问字典中的元素
# 第一种方式:直接通过下标访问
dict1 = {"name": "医生", "author": "原神", "person": "第五人格"}
print(dict1['author'])
# print(dict1['money'])#访问字典中不存在的key时,直接报错KeyError: 'money'
# 第二种方式:通过get()方法获取
print(dict1.get('name'))
print(dict1.get('money')) # None 访问字典中不存在的key时,返回None
print(dict1.get('money', 10000000)) # 10000000 访问字典中不存在的key时,若传递了第二个参数,第二个参数会设置为默认值
# 2.获取字典的长度len()
print(len(dict1)) # 3
# 3.获取字典中所有的key
print(dict1.keys()) # dict_keys(['name','author','person'])
# 4.获取字典中所有的value
print(dict1.values()) # dict_values(['医生', '原神', '第五人格'])
# 5.获取字典中的所有的key和value items()
print(dict1.items())
# dict_items([('name', '医生'), ('author', '原神'), ('person', '第五人格')])
# 6.遍历字典
# 第一种方式:for in
for i in dict1: # 遍历字典中所有的key
print(i)
# 第二种方式:enumrate()遍历字典中所有的key
for k, v in enumerate(dict1):
print(k, '----', v)
# 第三种方式:items遍历字典中所有的key和value
for k, v in dict1.items():
print(k, '----', v)
# 第四种方式:遍历字典中所有的值
for v in dict1.values():
print(v)
# 合并字典update()
dict2 = {"name": "py小王子", "money": "1000000", "age": 21}
dict3 = {"sex": "猛男"}
dict2.update(dict3)
print(dict2) # {'name': 'py小王子', 'money': '1000000', 'age': 21, 'sex': '猛男'}
# 增
dict4 = {"name": "iPhone16", "money": 20000, "color": "土豪金"}
dict4["size"] = 6.5
print(dict4) # {'name': 'iPhone16', 'money': 20000, 'color': '土豪金', 'size': 6.5}
# 改
dict4['color'] = "粉"
print(dict4) # {'name': 'iPhone16', 'money': 20000, 'color': '粉', 'size': 6.5}
# 删
# 第一种:pop()删除指定的元素
dict4.pop("color")
print(dict4) # {'name': 'iPhone16', 'money': 20000, 'size': 6.5}
# 第二种:popitem()随机返回并删除字典中的最后一对key和value
dict4.popitem()
print(dict4) # {'name': 'iPhone16', 'money': 20000}
# clear()清空字典
dict4.clear()
print(dict4) # {}
字典的应用?
例子1:输入一段话,统计每个英文字母出现的次数。
sentence = input('请输入一段话: ')
counter = {}
for ch in sentence:
if 'A' <= ch <= 'Z' or 'a' <= ch <= 'z':
counter[ch] = counter.get(ch, 0) + 1
for key, value in counter.items():
print(f'字母{key}出现了{value}次.')
例子2:在一个字典中保存了小朋友的零花钱,找出零花钱大于60元的小朋友,并创建一个新的字典。
money = {
'小米': 191.88,
'小名': 1186.96,
'小红': 149.24,
'小张': 48.44,
'小黄': 166.89,
'小笑': 208.09,
'小七': 21.29
}
money2 = {key: value for key, value in money.items() if value > 60}
print(money2)
总结
Python程序中的字典跟现实生活中字典非常像,允许我们以键值对的形式保存数据,再通过键索引对应的值。
大家通过本章学习需要知道,字典中的键必须是不可变类型,字典中的值可以是任意类型。
恭喜你学会了字典,快去试试吧!!!?