1 字典概述
- 字典是一系列键-值对。
- 每个键都与一个值相关联,程序员可使用键来访问与之相关联的值。
- 与之相关联的值可以是数字、字符串、列表或字典。
- 键-值对是两个相关联的值。
- 指定键时,Python会返回与之相关联的值。
- 键和值之间用冒号(:)分隔,键-值之间用逗号(,)分隔。
# 字典创建
a = {
1: 'a',
2: 'b',
'3': 'c'
}
# 注意:key必须是不可改变的数据类型
d = dict()
print(d)
e = dict(a=1, b=2, c='a')
print(e)
# 字典的访问
print(e['a'])
# 字典的改变
e['d'] = 123
print(e)
e['c'] = 3
print(e)
# 结论:一个字典不能成为另外一个字典的key,因为字典是可变的数据类型。
2 访问字典中的值
为了获取与键相关联的值,可依次指定字典名和放在方括号内的键。
字典中可包含任意数量的键-值对
3 添加键-值对
- 字典是动态结构,程序员可以随时在其中添加键-值对。
要添加键-值对,可依次指定字典名、方括号中的键和与之相关联的值。
- 键-值对的排列顺序和添加顺序不同。Python不关心键-值对的添加顺序,只关心键和值之间的关联关系。
4 创建空字典
使用一对空的花括号定义一个字典,再分别添加各个键-值对。
使用字典来存储用户提供的数据或在编写能自动生成大量键-值对的代码时,通常需要先定义一个空字典。
5 修改字典中的值
修改字典中的值,可依次指定字典名、方括号内的键以及与该键相关联的新值。
6 删除键-值对
对于字典中不再需要的值,可使用del语句将相应的键-值对彻底删除。
- 使用del语句时,必须指定字典名和要删除的键。
- del语句删除的键-值对永远消失。
7 由类似对象组成的字典
字典可以存储一个对象的多种信息,也可以用字典来存储众多对象的同一种信息。
- 定义好字典后,在最后一个键-值对的下一行添加一个花括号,并缩进4个空格,使其与字典最后的键对齐。
- 在最后一个键-值对后面也加上都好,为以后在下一行添加键-值对做好准备。
8 print语句分成多行
单词print比大多数字典名都短,因此让输出的第一部分紧跟在左括号后面是合理的。
- 在合适的地方拆分要打印的内容,并在第一行末尾加上一个拼接运算符(+)。
- 按回车键进入print语句的后续各行,并使用Tab键将它们对齐并缩进一级。
- 在指定要打印的所有内容后,在print语句的最后一行末尾加上右括号
9 遍历字典
- 要编写用于字典的for循环,可声明两个变量,用于存储键-值对中的键和对。
对于这两个变量,可以使用任何名称,例如key,value。
- for语句的第二部分包括字典名和方法items()
方法items()返回一个键-值对列表
- for循环一次循环将每个键-值对存储到指定的两个变量中,我们使用这两个变量来打印每个键及其相关联的值。
键-值对的返回顺序也与存储顺序不同。Python不关心键-值对的存储顺序,而只跟踪键和值之间的关联关系。
9.1 方法keys()
keys()便利字典中的所有键(在不需要使用字典中的值时)。
- 遍历字典时,会默认遍历所有的键。
- keys()并非用于遍历。实际上,它返回一个列表,其中包括字典中的所有键。
9.2 方法value()
- value()返回一个值列表,而不包含任何键。
- 字典总是明确记录键和值之间的关联关系,但获取字典的元素时,获取顺序时不可预测的。
- 要以特定的顺序返回元素,一种方法是在for循环中对返回的键进行排序。
9.3 方法set()
为剔除重复项,可使用集合set(),集合类似于列表,但每个元素都必须是独一无二的。
10 嵌套
将一系列字典存储在列表中,获奖列表作为值存储在字典中,这称为嵌套。
# 字典的基本操作
d = {
"Name": 'Jack',
"Age": 9,
"Grade": 5,
}
print(d['Name']) # 不推荐这种方法。
print(d.get('Name'))
print(d.get('name')) # 返回None
# 获取所有的key
print(d.keys())
# 获取所有的value
print(d.values())
# 获取所有的键值对
print(d.items())
# 去除一个键值对
d.pop('Name')
# 清空
d.clear()
print(d)
# 字典的更新
c = {
1: 1,
2: 2,
}
c[3] = 3
c[4] = 4
print(c)
d = {
1: 1,
5: 5,
6: 6,
}
c.update(d)
print(c)
e = {**c, **d}
print(e)
11 集合
集合的基本操作。
# 集合的创建
a = {'a', 'b', 'c'}
print(type(a))
t = 'c' in a
print(t)
L = [1, 2, 3, 2, 4, 5, 2]
s1 = set(L)
print(s1, type(s1), list(s1))
s = {1, 2, 3, 4}
s.add(5)
print(s)
s.add(5)
print(s)
s.remove(5)
print(s)
a = '1234512'
s1 = set(a)
print(s1)
# 小结:集合中的元素是无序的
# 数学集合
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
# 交集
print(s1 & s2)
# 全集
print(s1 | s2)
# 差集
print(s1 - s2)
print(s1 ^ s2)
动手试一试
6-1 人:
acquaintance = {
'first_name': 'steve',
'last_name': 'jobs',
'age': 18,
'city': 'new york',
}
print(acquaintance['first_name'])
print(acquaintance['last_name'])
print(acquaintance['age'])
print(acquaintance['city'])
6-2 喜欢的数字:
numbers = {
'cat': 1,
'dog': 2,
'admin': 3,
'fish': 4,
'tiger': 5
}
print('cat:' + str(numbers['cat']))
print('fish:' + str(numbers['fish']))
print('tiger:' + str(numbers['tiger']))
print('dog:' + str(numbers['dog']))
print('admin:' + str(numbers['admin']))
6-3 词汇表
glossary = {
'if': '条件测试判断',
'for': '循环',
'list': '列表',
'tuple': '元组',
'int': '整型',
}
print("if:" + glossary['if'])
print("for:" + glossary['for'])
print("list:" + glossary['list'])
print("tuple:" + glossary['tuple'])
print("int:" + glossary['int'])
6-4 词汇表2:
glossary = {
'if': '条件测试判断',
'for': '循环',
'list': '列表',
'tuple': '元组',
'int': '整型',
}
for key, value in glossary.items():
print(key + ": " + value)
glossary["or"] = "或者"
glossary["and"] = "并且"
glossary["break"] = "跳出当前循环"
glossary["title"] = "以首字母大写显示"
glossary["float"] = "浮点数"
for key, value in glossary.items():
print(key + ": " + value)
6-5 河流:
rivers = {
'Rhine River': 'france',
'Brahmaputra River': 'china',
'the Pearl River': 'china',
}
for key, value in rivers.items():
print(key + "run through " + value)
print()
for key in rivers.keys():
print(key)
print()
for value in set(rivers.values()):
print(value)
6-6 调查:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for name, language in favorite_languages.items():
print(name.title() + "'s fvorite language is " + language.title() + ".")
peoples = ['jen', 'sarah', 'phil']
for key in favorite_languages.keys():
print(key.title())
if key in peoples:
print("谢谢你参与调查!")
else:
print("邀请你参与调查!")
6-7 人:
people = {
'steve': {
'location': 'new york',
'gender': 'man',
'hobby': 'fishing',
},
'kate': {
'location': 'hongkong',
'gender': 'women',
'hobby': 'shopping',
},
'dog': {
'location': 'beijing',
'gender': 'man',
'hobby': 'dancing',
},
}
for people_name,people_info in people.items():
print("peopleName: " + people_name.title())
print("\tLocation: " + people_info['location'])
print("\tGender: " + people_info['gender'])
print("\tHobby: " + people_info['hobby'])
6-8 宠物:
pets = {
'小红': {
'类型': '泰迪',
'主人': '张三',
},
'小白': {
'类型': '鹦鹉',
'主人': '李四',
},
'小强': {
'类型': '恐龙',
'主人': '王麻子',
},
}
for pet_name, pet_info in pets.items():
print("petName: " + pet_name.title())
print("\t类型: " + pet_info['类型'])
print("\t主人: " + pet_info['主人'])
6-9 喜欢的地方:
favorite_places = {
'张三': ['天安门', '长城'],
'李四': ['九寨沟', '壶口瀑布'],
'王麻子':['埃菲尔铁塔', '金字塔'],
}
for people_name, people_info in favorite_places.items():
print("peopleName: " + people_name.title())
print("\tPlace: " + str(people_info))
6-10 喜欢的数字:
numbers = {
'cat': [1, 2, 3],
'dog': [3, 4, 6],
'admin': [8, 9, 0],
'fish': [1, 5, 8],
'tiger': [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
}
for number_name, name_info in numbers.items():
print("numberName: " + number_name.title())
print("\tnumberInfo: " + str(name_info))
6-11 城市:
cities = {
'北京': {
'国家': 'china',
'人口约数': 1370536875,
'事实': '这是中国的首都',
},
'上海': {
'国家': 'china',
'人口约数': 1370536875,
'事实': '这是中国最大的城市',
},
'香港': {
'国家': 'china',
'人口约数': 1370536875,
'事实': '这是中国最发达的城市',
},
}
for city_name, city_info in cities.items():
print("cityName: " + city_name.title())
print("\tcityCountry: " + city_info['国家'])
print("\tcityPopulation: " + str(city_info['人口约数']) + "人")
print("\tcityFact: " + city_info['事实'])