元组与字典——python

一、 元组

1. 元组就是不可变的列表

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])
  1. 列表相关操作都适用于元组
print((1, 2, 3, )+('a','b'))

相关方法

nums = (10, 34, 56, 40, 10)
print(nums.count(10))
print(nums.index(34))
2. 元组特有的一些方法和功能

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)
  1. 让变量的个数少于元组中元素的个数,并且在一个变量前加*

先让没有*号的变量依次获取元素,然后把剩下的所有的元素作为一个列表的返回

stu = ('小明',30,'男',96, 35, 60)
name, age, *gender, scores = stu
print(gender)
print(scores)

二、 字典

1. 字典

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

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.获取单个值

  1. 字典[key] - 获取字典中指定key对应的值(如果key不存在,会报错)
  2. 字典.get(key) - 获取字典中指定key对应的值(如果key不存在,不会报错,返回None)
    字典.get(key, 默认值) - 获取字典中指定key对应的值(如果key不存在,不会报错, 返回默认值)
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)
2. 字典的应用

练习:
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
3. 字典的相关操作和方法
  • 相关操作
    1)字典不支持加法、乘法和比较大小的运算
# 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])
  1. 字典.setdefault(key, value) - 在字典中添加键值对(单纯的添加键值对,不会修改)
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}
  1. 字典1.update(字典2) - 将字典2中所有的键值对全部添加到字典1中
stu.update({
     'a': 10, 'b': 20})
print(stu)   # {'name': '小明', 'age': 18, 'score': 100, 'weight': 50, 'a': 10, 'b': 20}

你可能感兴趣的:(python)