Python Diary - Day 7 元组 字典 集合 拆包

目录

一、元组

1.元组简介

2.元组具有和列表一样的操作

3.元组拆包

二、字典

1.字典的基本介绍

2.字典的使用

2.1另外

3.遍历字典

三、集合

1.集合简介

2.集合的运算

三、小练习

1.a = {"name":"123","data":{"result":[{"src":"python1"},{"src":"python2"},{"src":"python3"}]}} 找到python1/python2/python3

2.有如下值集合{11,22,33,44,55,66,77,88,99,90}, 将所有大于66的值保存至字典的第一个key的值中,将小于66值保存至第二个key的值中。


一、元组

1.元组简介

  • 元组表现形式tuple
  • 元组是一个不可变序列(一般当我们希望数据不改变时,我们使用元组,其他情况下基本都用列表)
  • 使用()创建元素
    my_tuple = (1, 2, 3, 4)
    print(my_tuple, type(my_tuple))
    
    (1, 2, 3, 4) <class 'tuple'>
    

     

2.元组具有和列表一样的操作

  • tuple1 = (1, 1, 2, 3, 4)
    print(len(tuple1))
    print(max(tuple1))
    print(min(tuple1))
    print(1 in tuple1)
    print(1 not in tuple1)
    print(tuple1.count(1))
    print(tuple1.index(3))
    5
    4
    1
    True
    False
    2
    3
    
    Process finished with exit code 0
    

     

3.元组拆包

  • 元组拆包指将元组当中的每一个元素都赋值给一个变量
    my_tuple = (1, 2, 3, 4, 5, 6)
    a, b, c, d, e ,f= my_tuple
    # 在对一个元组拆包的时候,变量的数量和元组中元素的数量要把持一致,
    # a, b, c, d, e=my_tuple  不可以
    print('a', a)
    print('b', b)
    print('c', c)
    print('d', d)
    print('e',e)
    print('f',f)
    a 1
    b 2
    c 3
    d 4
    e 5
    f 6
    
    my_tuple = (1, 2, 3, 4, 5, 6)
    a, *b, c, d = my_tuple  #这里的*b代表剩余的元素
    # *只可有一个
    # a, *b, *c, d = my_tuple  不可以
    print('a', a)
    print('b', b)
    print('c', c)
    print('d', d)
    a 1
    b [2, 3, 4]
    c 5
    d 6

     

  • 字符串和列表的拆包也一样
    # 字符串拆包
    s = 'abcdef'
    a, b, *c = s
    print(a, b, c)
    
    # 列表拆包
    list1 = [1, 2, 3, 4]
    a, b, *c = list1
    print(a, b, c)
    a b ['c', 'd', 'e', 'f']
    1 2 [3, 4]

     

二、字典

1.字典的基本介绍

  • 字典属于一种新的数据结构称为映射(mapping)
  • 字典的作用和列表类似,都是用来存储对象的容器
  • 列表存储数据的性能好,但是查询数据的性能差,字典正好与之相反
  • 在字典中每一个元素都有唯一的名字,通过这个唯一的名字可以找到指定的元素
  • 这个唯一的名字我们称之为key 通过key可以快速查询value 也可以称之为值
  • 字典我们也称之为键值对(key-value)结构
  • 每个字典中都可以有多个键值对,而每一个键值对我们称其为一项(item)
  • 创建一个有数据的字典 语法 {key:value}
    d = {'name':'刘亦菲','age':18,'gender':'女神'}
    print(d, type(d))
    {'name': '刘亦菲', 'age': 18, 'gender': '女神'} <class 'dict'>

     

  • 字典的值可以是任意对象 字典的键可以是任意的不可变对象(int str bool tuple....)
  • 字典的键是不能重复的,如果出现重复的后面的会替换前面的
    d = { 'name': '刘亦菲','age': 18,'gender': '女神','name': '周慧敏'}
    print(d)
    {'name': '周慧敏', 'age': 18, 'gender': '女神'}

     

2.字典的使用

  • dict()函数来创建字典
    d1 = dict(name='刘亦菲', age=18)
    print(d1)
    {'name': '刘亦菲', 'age': 18}
    # 双值子序列  [(1, 2), (3, 4)]
    list1 = [(1, 2), (3, 4)]
    d = dict(list1)
    print(d)
    {1: 2, 3: 4}

     

  • get(key,default) 根据键来获取字典的值。第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值
    # get(key, default)
    # 如果是没有这个key,返回None,不会报错
    # 也可以指定一个默认值,来作为第二个参数,这样获取不到key值的是偶可以返回默认值
    d = {
        'name': '刘亦菲',
        'age': 18,
        'gender': '女神'
    }
    print(d.get('xec'))
    print(d.get('xec','你是谁'))
    print(d.get('name'))
    None
    你是谁
    刘亦菲
    # 修改字典
    d = {
        'name': '刘亦菲',
        'age': 18,
        'gender': '女神'
    }
    # d[key] = value
    d['age'] = 16
    print(d)
    # 没有这个key-value就是添加
    d['height'] = 174
    print(d)
    {'name': '刘亦菲', 'age': 16, 'gender': '女神'}
    {'name': '刘亦菲', 'age': 16, 'gender': '女神', 'height': 174}

     

  • setdefault(key,default)添加,如果这个key已经存在于字典中,则返回value值,不会对字典造成影响,如果存在,则向字典中添加key-value
    # 添加 setdefault(key, default)
    # 如果这个key已经存在于字典中,则返回value值,不会对字典造成影响
    # 如果不存在,则向字典中添加key-value
    d = {
        'name': '刘亦菲',
        'age': 18,
        'gender': '女神'
    }
    res = d.setdefault('name', '周慧敏')
    print(res)
    res = d.setdefault('height', 170)
    print(res)
    print(d)
    刘亦菲
    170
    {'name': '刘亦菲', 'age': 18, 'gender': '女神', 'height': 170}

     

  • update() 将其他字典的key-value添加到当前的字典当中
    # 添加 update()  将其他的字典当中的key-value添加到当前的字典中
    d = {
        'name': '刘亦菲',
        'age': 18,
        'gender': '女神'
    }
    d1 = {1: '1', 2: '2'}
    d.update(d1)
    print(d)
    {'name': '刘亦菲', 'age': 18, 'gender': '女神', 1: '1', 2: '2'}

     

  • del 删除字典中的key-value
    # del  删除字典中的key-value
    d = {
        'name': '刘亦菲',
        'age': 18,
        'gender': '女神'
    }
    del d['age']
    print(d)
    {'name': '刘亦菲', 'gender': '女神'}

     

  • popitem() 删除字典最后的一个key-value 这个方法是有返回值的。删除之后它会将删除的key-value作为返回值返回
    # popitem() 随机删除一个键值对,一般都是删除最后一个
    # 它会将删除后的键值对作为返回值返回
    d = {
        'name': '刘亦菲',
        'age': 18,
        'gender': '女神'
    }
    res = d.popitem()
    print(res)
    print(d)
    ('gender', '女神')
    {'name': '刘亦菲', 'age': 18}

     

  • pop(key,default) 根据key删除自定中的value。第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值
    # pop(key, default)
    # 如果key不存在,则返回default
    # 如果key存在,可省略default, 而如果key不存在,不可省略defaul,否则会报错
    d = {
        'name': '刘亦菲',
        'age': 18,
        'gender': '女神'
    }
    res = d.pop('height','不存在')
    print(res)
    print(d)
    res = d.pop('age')
    print(res)
    print(d)
    不存在
    {'name': '刘亦菲', 'age': 18, 'gender': '女神'}
    18
    {'name': '刘亦菲', 'gender': '女神'}

     

  • clear()清空字典
    #clear() 清空字典
    d = {
        'name': '刘亦菲',
        'age': 18,
        'gender': '女神'
    }
    d.clear()
    print(d)
    {}

     

  • copy() 方法用来对字典进行潜复制
    • 注意:潜复制只会复制字典本身,如果字典中还有别的数据类型是不会进行复制的
  • d = {
        'name': '刘亦菲',
        'age': 18,
        'gender': '女神',
        'friend': {
            'name': '唐嫣',
            'age': 32
        }
    }
    d1 = d.copy()
    print(d1)
    # 浅拷贝: 第二层数据的id一样, 拷贝之后的对象和原对象id不一样  (第二层的数据只能引用)
    print(id(d['friend']), id(d1['friend']))
    print(id(d), id(d1))
    {'name': '刘亦菲', 'age': 18, 'gender': '女神', 'friend': {'name': '唐嫣', 'age': 32}}
    1688651000928 1688651000928
    1688651001000 1688651001360
    # 深拷贝  把所有层次的数据重新拷贝成为一个新的对象
    import copy
    d = {
        'name': '刘亦菲',
        'age': 18,
        'gender': '女神',
        'friend': {
            'name': '唐嫣',
            'age': 32
        }
    }
    d2 = copy.deepcopy(d)
    print(id(d['friend']), id(d2['friend']))
    print(id(d), id(d2))
    1895790439520 1895791755768
    1895790439592 1895790527112

     

2.1另外

d = {
    'name': '刘亦菲',
    'age': 18,
    'gender': '女神'
}
# len()  是对key进行操作
print(len(d))
# in not in 是对key进行操作
print('name' in d)
print('刘亦菲' in d)
print(d['age']) #查找

# 字典中没有索引,没有index()和count()方法
3
True
False
18

3.遍历字典

我们主要可以通过3种方式对字典进行遍历

  • keys()  该方法返回字典所有的key
  • values() 该方法返回一个序列 序列中保存有字典的值
  • items() 该方法会返回字典中所有的项 它返回一个序列,序列中包含有双值子序列 双值分别是 字典中的key和value
    d = {
        'name': '刘亦菲',
        'age': 18,
        'gender': '女神'
    }
    print('keys():',d.keys())
    print('values():',d.values())
    print('items():',d.items())
    keys(): dict_keys(['name', 'age', 'gender'])
    values(): dict_values(['刘亦菲', 18, '女神'])
    items(): dict_items([('name', '刘亦菲'), ('age', 18), ('gender', '女神')])
    d = {
        'name': '刘亦菲',
        'age': 18,
        'gender': '女神'
    }
    for k in d.keys():
        print(d[k])
    
    # 是不是和我一样异想天开,来了个如下
    # for k in d.values():
    #    print(d[k])
    # 不好意思,这个报错了
    刘亦菲
    18
    女神
    d = {
        'name': '刘亦菲',
        'age': 18,
        'gender': '女神'
    }
    for k, v in d.items():
        print(k, '=', v)
    name = 刘亦菲
    age = 18
    gender = 女神

     

三、集合

1.集合简介

  • 集合表现形式set 集合和列表非常相似
  • 不同点
    • 集合只能存储不可变对象
      # 集合只能存储不可变对象
      s={[1, 2, 3]}
      print(s)
      
      # 报错如下  [1, 2, 3]是列表,是个可变对象
      Traceback (most recent call last):
        File "D:/桌面/Python课程/Python核心编程-cheney/20201127-第七讲-元组&字典&集合/上课代码/集合的简介.py", line 13, in <module>
          s={[1, 2, 3]}
      TypeError: unhashable type: 'list'
      

       

    • 集合中存储的对象是无序的
      # 集合中存储的对象是无序的
      s = {1, 2, 'sdfb', 3, (1, 2)}
      print(s)
      {(1, 2), 1, 2, 3, 'sdfb'}

       

    • 集合不能出现重复元素
      # 集合不能出现重复元素   #  用集合去做去重的操作
      s = {1, 2, 'sdfb', 3, (1, 2), 1, 2, 3}
      print(s)
      {(1, 2), 1, 2, 3, 'sdfb'}

       

  • 使用{}来创建集合
  • 可以通过set()来将序列和字典转换成集合
    # 去重
    list1 = [1, 2, 3, 4, 4, 3, 2, 1]
    print(set(list1))
    print(list(set(list1)))
    {1, 2, 3, 4}
    [1, 2, 3, 4]
  • len() 使用len()来获取集合中元素的数量
    s={1, 2, 3}
    print(len(s))
    3

     

  • add()像集合中添加元素
    # add()  添加元素进集合
    s = set()  #空集合
    s.add(1)
    print(s)
    {1}

     

  • update()将一个集合中的元素添加到另一个集合当中
    # update()  将一个集合中的元素添加到另一个集合中
    s=set() #空集合
    s1 = {2, 3, 4, (1, 2)}
    s.update(s1)
    print(s)
    {(1, 2), 2, 3, 4}

     

  • pop()随机删除集合中的一个元素一般是删除最后一个元素
    # pop() 随机删除
    s = {2, 3, 4, (1, 2),5}
    s.pop()
    print(s)
    {2, 3, 4, 5}

     

  • remove() 删除集合中指定的元素
    # remove() 指定删除元素
    s = {2, 3, 4, (1, 2),5}
    s.remove((1, 2))
    print(s)
    {2, 3, 4, 5}

     

  • clear() 清空集合
    # clear() 清空
    s = {2, 3, 4, (1, 2),5}
    s.clear()
    print(s)
    set()

     

2.集合的运算

  • & 交集运算
  • | 并集运算
  • - 差集运算
  • ^ 亦或集
    s1 = {2, 3, 4, (1, 2),5}
    s2 = {1, 2, 3,  (1, 2), (2, 3)}
    # & 交集运算 | 并集运算 和数学中集合的交集并集运算一样
    print(s1 & s2)
    print(s1 | s2)
    # - 差集运算 将s1中和s2相同元素移除
    print(s1 - s2)
    # ^ 亦或运算 将s1和s2不相同的元素组成一个新集合
    print(s1 ^ s2)
    {(1, 2), 2, 3}
    {(1, 2), 1, 2, 3, 4, 5, (2, 3)}
    {4, 5}
    {1, (2, 3), 4, 5}

     

  • <= 检查一个集合是否是另一个集合的子集
  • < 检查一个集合是否是另一个集合的真子集
  • >=检查一个集合是否是另一个集合的超集
  • >检查一个集合是否是另一个集合的真超集
    s1 = {2, 3, 4, (1, 2), 5}
    s2 = {2, 3}
    s3 = {2, 3, 4, (1, 2), 5}
    print(s2 <= s1)
    print(s2 < s1)
    print(s3 <= s1)
    print(s3 < s1)
    
    print(s1 >= s2)
    print(s1 > s2)
    print(s1 >= s3)
    print(s1 > s3)
    
    # 会数学中集合的子集和真子集,这个就能够轻易掌握
    True
    True
    True
    False
    True
    True
    True
    False
    

     

三、小练习

1.a = {"name":"123","data":{"result":[{"src":"python1"},{"src":"python2"},{"src":"python3"}]}} 找到python1/python2/python3

a = {"name":"123","data":{"result":[{"src":"python1"},{"src":"python2"},{"src":"python3"}]}}

# 方法一:
b=a.get("data").get("result")
for i in b:
    print(i.get("src"))

# 方法二:
for i in a['data']['result']:
    print(i['src'])

2.有如下值集合{11,22,33,44,55,66,77,88,99,90}, 将所有大于66的值保存至字典的第一个key的值中,将小于66值保存至第二个key的值中。

s={11,22,33,44,55,66,77,88,99,90}
d={'大于66':[],'小于66':[]}
for i in s:
    if i > 66:
        d.setdefault('大于66').append(i)
    if i < 66:
        d.setdefault('小于66').append(i)
print(d)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值