1)元素可以是任何类型的数据
tuple1 = (10, 25 , True, 'sadad', [1,2,3])
print(tuple1)
2)列表获取元素的方法都适用于元组
tuple2 = ('杨幂','刘亦菲','张艺兴','邓超')
print(tuple2[1])
遍历
for x in tuple2:
print(x)
for index , item in enumerate(tuple2):
print(index, item)
切片
print(tuple2[::-1])
print((1, 2, 3, )+('a','b'))
相关方法
nums = (10, 34, 56, 40, 10)
print(nums.count(10))
print(nums.index(34))
1)只有一个元素的元组:()中唯一的元素后需要添加逗号
list1 = [100]
print(type(list1)) #
tuple1 = (100)
print(type(tuple1)) #
tuple1 = (100,)
print(type(tuple1)) #
2)直接多个数据用逗号隔开表示的也是一个元组(元组的括号在没有歧义的时候可以省略)
tuple2 = (100 , 200, 300)
tuple3 = 100, 200, 300
print(tuple2,tuple3)
3)获取元素的时候可以通过让变量的个数和元组中元素的个数保持一致,来分别获取元组中每个元素的值
point = (1000, 200)
x, y =point
print(x, y)
先让没有*号的变量依次获取元素,然后把剩下的所有的元素作为一个列表的返回
stu = ('小明',30,'男',96, 35, 60)
name, age, *gender, scores = stu
print(gender)
print(scores)
问题:用列表同时保存多个意义不同的数据,代码的可读性很低
stu = ['小明',30,'男','1555555555',96, 35, 60]
解决:用字典保存多个意义不同的数据
stu = {
'name':'小明',
'age':20,
'sex':'男',
'm-tel':'15555555555',
'score':60}
print(stu['name'])
print(stu['sex'])
print(stu['score'])
字典是容器型数据类型的数据,将{}作为容器的标志,里面多个用逗号隔开(其中元素必须是键值对)
{键1:值1, 键2:值2, 键3:值3, …}
字典是可变(支持增删改);字典是无序(不支持下标操作)
字典的元素:键是不可变的,唯一的;值可以值任何类型的数据,并且可以重复
print({
'a': 10, 'b': 20} == {
'b': 20, 'a': 10}) # True
dict1 = {
10: 100,
'abc': 200,
(10,): 300
}
# dict2 = {[10, 20]: 100} # TypeError: unhashable type: 'list', 列表不可以作为key
dict3 = {
'name': '张三', 'name': 100}
print(dict3) # {'name': 100}
练习: 定义一个字典,保存一条的狗的信息,包括:名字、品种、颜色、年龄
dog1 = {
'name': '贝贝',
'bread': '土狗',
'color': '黄色',
'age': 1
}
查 - 获取字典的值
a.获取单个值
movie1 = {
'name': '战狼',
'director': '吴京',
'actor': '吴京',
'release_time': '2015',
'kind': '动作/战争/军事'
}
movie2 = {
'name': '沉默的羔羊',
'director': '乔纳森·戴米',
'actor': '茱迪·福斯特,安东尼·霍普金斯',
'release_time': '1991',
'kind': '惊悚'
}
print(movie1['name'])
print(movie1['kind'])
print(movie2['name'])
# print(movie1['score']) # KeyError: 'score'
print(movie2.get('kind')) # 惊悚
print(movie2.get('score')) # None
print(movie2.get('release_time', '2020-1-1')) # 1991
print(movie2.get('score', 1)) # 1
b.遍历字典
(推荐使用)方法一:
for 变量 in 字典:
循环体(变量在循环体中得到的是字典的key)
for x in movie1:
print(x, movie1[x])
方法二:
for 变量1,变量2 in 字典.items():
循环体(循环体中变量1取到的所有的键,变量2取到的是所有键对应的值)
print(movie1.items())
for x, y in movie1.items():
print(x, y)
增/改 - 添加键值对/修改键值对的值
字典[key] = 值 - 当key不存在就是添加键值对;当key存在的时候就是修改key对应的值
subject = {
'name': 'Python',
'score': 3,
'class_hour': 20,
'direction': ['数据分析', 'web后端', '爬虫', '自动测试', '自动化运维']
}
print(subject)
subject['teacher'] = '余婷'
print(subject)
subject['score'] = 4
print(subject)
删
del 字典[key] - 删除字典指定key对应的键值对
字典.pop(key) - 取出字典中指定key对应的值
del subject['class_hour']
print(subject)
del_item = subject.pop('direction')
print(subject)
print(del_item)
练习:
1.定义一个变量同时保存5条狗的信息,每条狗有:名字、年龄、性别、品种、价格和颜色
2.统计5条狗中公的有多少条
3.打印所有价格超过2000元的狗的名字
dogs = [
{
'name': '大黄', 'age': 3, 'sex': '公', 'breed': '土狗', 'price': 10, 'color': '黄色'},
{
'name': '白白', 'age': 2, 'sex': '母', 'breed': '银狐', 'price': 2500, 'color': '白色'},
{
'name': '八两', 'age': 1, 'sex': '母', 'breed': '金毛', 'price': 800, 'color': '黄色'},
{
'name': '橙子', 'age': 1, 'sex': '母', 'breed': '巴哥', 'price': 1500, 'color': '黄色'},
{
'name': '二爷', 'age': 2, 'sex': '公', 'breed': '贵宾犬', 'price': 3000, 'color': '白色'}
]
count = 0
for dog in dogs:
# print(dog['sex'])
if dog['sex'] == '公':
count += 1
if dog['price'] > 2000:
print(dog['name'])
print('公狗的数量:', count)
定义一个变量保存一个班级信息
c = {
'name': 'python2003',
'position': '23教室',
'lecturer': {
'name': '余婷',
'sex': '女',
'age': 18,
'QQ': '726550822'
},
'class_teacher': {
'name': '杨云珂',
'sex': '女',
'age': 20,
'QQ': '782921812'
},
'students': [
{
'name': '马杰', 'id': '6272636716212', 'tel': '110'},
{
'name': '佳伟', 'id': '7823823', 'tel': '110'},
{
'name': '朝林', 'id': '79283293', 'tel': '110'},
{
'name': '马杰', 'id': '6272636716212', 'tel': '110'},
{
'name': '马杰', 'id': '6272636716212', 'tel': '110'}
]
}
# l = c['lecturer']
# print(l)
# print(l['QQ'])
print(c['lecturer']['QQ']) # 726550822
print(c['students'][2]['id']) # 79283293
# print({'a': 10} + {'b': 20}) # TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
# print({'a': 100} > {'b': 10}) # TypeError: '>' not supported between instances of 'dict' and 'dict'
2)判断数据本身是否相等: ==, !=
print({
'a': 10, 'b': 20} == {
'b': 20, 'a': 10}) # True
is - 判断两个数据的地址是否相等
a = {
'a': 10}
b = {
'a': 10}
c = a
print(id(a), id(b), id(c))
print(a == b) # True
print(a is b) # False
print(a is c) # True
3)in 和 not in
key in 字典 - 判断字典中是否有指定的key
dict1 = {
'a': 10, 'b': 20, 'c': 30}
print(10 in dict1) # False
print('b' in dict1) # True
4)相关函数: len、dict
len(字典) - 获取字典中键值对的个数
print(len(dict1)) # 3
dict(数据) - 将其他数据转换成字典(数据的要求: 1.序列 2.序列中的元素还是序列 3.内部的序列有且只有两个元素,第一个元素不可变)
list1 = ['ab', (10, 20), ['name', '张三']]
print(dict(list1)) # {'a': 'b', 10: 20, 'name': '张三'}
将字典转换成其他数据
stu = {
'name': '小明', 'age': 18, 'score': 100}
1)将字典转换成列表/元组 - 将字典的key作为列表/元组的元素
print(list(stu)) # ['name', 'age', 'score']
print(tuple(stu)) # ('name', 'age', 'score')
2)将字典转换成字符串
print(str(stu)) # "{'name': '小明', 'age': 18, 'score': 100}"
3)将字典转换成布尔
print(bool({
})) # False
print(bool(stu)) # True
1)字典.clear()
stu = {
'name': '小明', 'age': 18, 'score': 100}
stu.clear()
print(stu) # {}
2)字典.copy()
stu = {
'name': '小明', 'age': 18, 'score': 100}
stu1 = stu
stu['name'] = '小花'
print(stu1) # {'name': '小花', 'age': 18, 'score': 100}
stu = {
'name': '小明', 'age': 18, 'score': 100}
stu2 = stu.copy()
print(stu2) # {'name': '小明', 'age': 18, 'score': 100}
stu['name'] = '小花'
print(stu2) # {'name': '小明', 'age': 18, 'score': 100}
3)dict.fromkeys(序列, 默认值=None) - 创建一个新的字典,序列中所有的元素会作为新字典的key, 默认值是所有key对应的值
new_dict = dict.fromkeys('abc')
print(new_dict) # {'a': None, 'b': None, 'c': None}
new_dict = dict.fromkeys(['name', 'age', 'sex'], 0)
print(new_dict) # {'name': 0, 'age': 0, 'sex': 0}
new_dict = dict.fromkeys(['name', 'age', 'sex'], ['张三', 19, '男'])
print(new_dict) # {'name': ['张三', 19, '男'], 'age': ['张三', 19, '男'], 'sex': ['张三', 19, '男']}
4)字典.items()、字典.keys()、字典.values()
stu = {
'name': '小明', 'age': 18, 'score': 100}
print(stu.items()) # dict_items([('name', '小明'), ('age', 18), ('score', 100)])
print(stu.keys()) # dict_keys(['name', 'age', 'score'])
print(stu.values()) # dict_values(['小明', 18, 100])
stu = {
'name': '小明', 'age': 18, 'score': 100}
stu.setdefault('weight', 50)
print(stu) # {'name': '小明', 'age': 18, 'score': 100, 'weight': 50}
stu.setdefault('name', '小花')
print(stu) # {'name': '小明', 'age': 18, 'score': 100, 'weight': 50}
stu.update({
'a': 10, 'b': 20})
print(stu) # {'name': '小明', 'age': 18, 'score': 100, 'weight': 50, 'a': 10, 'b': 20}