当前位置: 代码迷 >> 综合 >> day07-python字典
  详细解决方案

day07-python字典

热度:57   发布时间:2024-02-02 04:55:48.0

一 元组

1.1 元组是不可变的列表

元素可以是任何类型的数据

tuple1 = (10, 20, 30, 'abc', 10*30)
print(tuple1)

2.2 列表获取元素的方法都适用于元组

tuple2 = ('咪咪', '任旧康', '张一山', '刘亦菲')
# 获取单个元素
print(tuple2[1])
print(tuple2[-1])
  • 遍历
for i in tuple2:print(i)for index, item in enumerate(tuple2):print(index, item)
  • 切片
print(tuple2[::-1])

1.3 列表相关操作都是用于元组

print((1, 2, 3) + ('a', 'b'))
print((1, 2, 3) * 3)
print((1, 2, 3) == (2, 3, 4))
print(100 in (111, 200, 100))
print(tuple('abc'))
  • 相关方法
nums = (10, 20, 30, 43, 2, 34, 10)
print(nums.count(10))
print(nums.index(20))

1.4 元组特有的一些方法和功能

  1. 只有一个元素的元组:()中唯一的元素后面需要添加逗号
list1 = [1]
print(type(list1))  # <class 'list'>tuple1 = (1)
print(type(tuple1))  # <class 'int'>tuple2 = (1,)
print(type(tuple2))  # <class 'tuple'>
  1. 直接多个数据用用逗号隔开表示的也是一个元组(元组的括号在没有歧义的时候可以省略)
tuple3 = (100, 200, 300)
tuple4 = 100, 200, 300
print(type(tuple4), tuple4)
  1. 获取元素的时候可以通过让变量的个数和元组中元素的歌数保持一致,来分别获取元组中每个元素的值
point = (100, 200)
x, y = point
print(x, y)
  1. 让变量的个数少于元组中元素的个数,并且在一个变量前加*。
    先让没有号的变量一次获取元组中的元素,然后把剩下的所有元素作为一个列表返回
stu = ('小明', '30', '男', 89, 90, 44, 100)
names, age, gender, *scores = stu
print(names, age, gender, *scores)a, *b, c, d = stu
print(a)
print(b)
print(c)
print(d)

二 字典

2.1 引出字典

问题:用列表同时保存多个意义不同的数据的时候,代码的可读性很低

stu = ['小明', '20', '男', '15182639450', '13689742581', 56, 170, 89]

解决:用字典保存多个意义不同的数据

stu = {'name': '小明','age': 20,'sex': '男','tel': '15182639450','m_tel': '13689742581','weight': 56,'height': 170,'score': 80
}
print(stu['name'])
print(stu['sex'])
print(stu['score'])

2.2 什么是字典

字典是容器数据类型的数据,将{}作为容器的标志,里面多个元素用逗号隔开(其中与那苏必须是键值对):
{键1:值1, 键2:值2, 键3:值3, …}

2.3 字典的特点

字典是可变的(支持增删改);字典是无序的(不支持下标操作)

2.4.字典的元素:键必须是不可变的,唯一的;值可以是任何类型的数据,并且可以重复

dict1 = {10: 100,'abc': 300
}
print(dict1)

练习:定义一个字典,保留一条狗的信息,包括名字、品种、颜色、年龄。

dict_dog = {'姓名': '馒头','品种': '藏獒','颜色': '黑色','叫声': '┗|`O′|┛ 嗷~~','年龄': 20
}
print(dict_dog)

2.4.1字典元素的增删改查

  1. 查 - 获取字典的值
  • 获取单个值
    ① 字典[key] - 获取字典中指定key对应的值(如果key不存在,会报错)
    ② 字典.get(key) - 获取字典中指定key对应的值(如果key不存在,不会报错,返回None)
    字典.get(key,默认值) - 获取字典中指定key对应的值(如果key不存在,不会报错,返回默认值)
movies = {'name': '战狼','director': '吴京','actor': '吴京','release_time': '2015','kind': '动作/战争/军事'
}
movies1 = {'name': '沉默的羔羊','director': '乔纳森·戴米','actor': '莱蒂·福斯特','release_time': '1991','kind': '惊悚'
}
print(movies['name'])
print(movies1['release_time'])
print(movies1.get('score'))
print(movies1.get('color', 'yellow'))
print(movies1.get('name'))
print(movies.get('kind'))
  • 遍历字典
    ①:
    for 变量 in 字典: - 变量在循环体中得到是字典的key
    循环体
for x in movies1:print(x, movies1[x])

②:
for 变量1, 变量2 in 字典.items(): - 同时获取字典中的key和key对应的值
循环体

for x, y in movies.items():print(x, y)
  1. 增/改 - 添加键值对/修改键值对的值
    ①:
    字典[key] = 值 - 当key不存在,就在最后添加键值对;当key存在的时候就是修改key对应的值
print('========================================')
dict_subject = {'name': 'python','score': 3,'class_hour': 20,'direction': ['数据分析', 'web后端', '自动化运维', '爬虫', '自动化运维']
}
dict_subject['teacher'] = '老任'
print(dict_subject)

  1. ①:
    del 字典[key] - 删除字典指定key对应的键值对
del dict_subject['class_hour']
print(dict_subject)

②:
字典.pop(key) - 取出字典中指定key对应的值

direction = dict_subject.pop('direction')
print(direction)

2.5 字典相关操作

  1. 字典不支持加法、乘法和比较大小的运算
  2. 判断相等
print({'a': 10, 'b': 20} == {'b': 20, 'a': 10})  # True
  1. is - 判断两个数据的地址是否相等
a = {'a': 10}
b = {'a': 10}
c = a
print(a == b)  # True
print(a is b)  # False
print(a is c)  # True
  1. in 和not in
    key in 字典 - 判断字典中是否有指定的key
dict1 = {'a': 10, 'b': 20, 'c': 30}
print(10 in dict1)  # False
print('b' in dict1)  #True
  1. 相关函数:len、dict
    ① len(字典) - 获取字典中键值对的个数
print(len(dict1))

② dict(数据) - 将其他数据转换成字典(数据的要求:1.序列 2.序列中的元素还是序列 3内部的序列有且只有两个元素,第一个元素不可变)

list1 = ['ab', (10, 20), ['name', '张三']]
print(dict(list1))
  1. 将字典转换成其他数据
  • 将字典转换成列表/元组 - 将字典的key作为列表/元组的元素
stu = {'name': '小明', 'age': 18, 'score': 100}
print(list(stu))
print(tuple(stu))
  • 将字典转换成字符串
print(str(stu))
  • 将字典转换成布尔
print(bool({}))
print(bool(stu))
  1. 相关方法
  • 字典.clear()
  • 字典.copy()
stu = {'name': '小明', 'age': 18, 'score': 100}
stu2 = stu
stu2['name'] = '小花'
print(stu2)
  • dict.fromkeys(序列, 默认值=None) - 创建一个新的字典,序列中所有的元素作为新字典的key,默认值是所有key对应的值
new_dict = dict.fromkeys('abs')
print(new_dict)
  • 字典.items()、字典.keys()、字典.values()
stu = {'name': '小明', 'age': 18, 'score': 100}
print(stu.items())
print(stu.keys())
print(stu.values())
  • 字典.setdefault(key, value) - 在字典中添加键值对(如果指定的可以已在原字典中存在,就不会改变原来的值)
stu = {'name': '小明', 'age': 18, 'score': 100}
stu.setdefault('weight', 50)
print(stu)
  • 字典1.update(字典2) - 将字典2中的键值对添加到字典1中
stu = {'name': '小明', 'age': 18, 'score': 100}
stu2 = {'a': 10, 'b': 20}
stu.update(stu2)
print(stu)