Python元组(tuple)和字典(dict)的合并使用

发布时间 2023-06-16 15:06:30作者: 小小程序员-lian

Python 包含6种数据类型,其中Number(数字)、String(字符串)、Tuple(元组)、 List(列表)、Dictionary(字典)、Set(集合);

1.回顾Tuple(元组)的常用方法:

  • Tuple的创建:tuple()方法创建,或者小括号的方式,有时也直接省略小括号
    a = tuple(range(10))
    b = tuple('hkd')
    c = tuple([1,2,3])

    PS:tuple()可以接收列表、字符串、其他序列类型、迭代器等生成元组。 list()可以接收元组、字符串、其他序列类型、迭代器等生成列表。 

  • Tuple的常用方法:基本上跟列表(list)一样,不过,元组的特殊性就在于元素是不可变系列(不能修改元组中的元素)
    a = (1, 1, 2, 8, 4, 1, 6, 7, 8, 9)
    # 元组的切片方法
    print(f"取前四个元素:{a[:4]}")
    # 元组的计数方法
    print(f"1出现的次数:{a.count(1)}次" )
    # 元组的索引
    print( f"数字8第一次出现的索引位置:{a.index(8)}")
    # 元组的排序 使用内置函数sorted(tupleObj),并生成新的列表对象。
    print(f"元组a的排序:{sorted(a)}")

  • ps:元组的元素不能修改
  • 列表与元组的结合使用:zip(列表1,列表2,...)将多个列表对应位置的元素组合成为元组(多出来的元素则忽视), 并返回这个zip对象,需要通过list方法转为列表
    a = [10,20,30]
    b = [40,50,60,80,100]
    c = zip(a,b)
    print(f"c的类型为:{type(c)}")
    # 将c转化为列表
    list(c) 

  • 元组总结
    1 元组的核心特点是:不可变序列。
    2 元组的访问和处理速度比列表快。
    3 与整数和字符串一样,元组可以作为字典的键,列表则永远不能作为字典的键使用
2.回顾dict(字典)的常用方法:
  • 字典的创建:通过{}、dict()来创建字典对象。 
    # ①:{}方式创建
    a = {'name':'lxx','age':18,'job':'salmer'}
    print(f"花括号方式创建a为:{a}")
    
    # ②:dict()方式创建
    b = dict(name='lxx',age=18,job='salmer')
    print(f"dict方式创建b为:{b}")
    
    # ③:zip()方式创建
    k = ['name','age','job']
    v = ['lxx',18,'salmer']
    w = dict(zip(k,v))
    print(f"zip方式创建w为:{w}")
    
    # ④:通过fromkeys创建值为空的字典
    f = dict.fromkeys(['name','age','job'])
    print(f"fromkeys创建f为:{f}")

  • 字典元素的访问 

    a = {'name':'lxx','age':18,'job':'salmer'}
    # 通过get()方法获得“值”。❤❤推荐使用。
    print(f"job对应的值为:{a.get('name')}")
    # 通过 [键] 获得“值”。若键不存在,则抛出异常。
    print(f"age对应的值为:{a['age']}")
    # 列出所有的键值对
    print(f"a的所有键值对为:{a.items()}")
    # 列出所有的键,列出所有的值
    print(f"a的所有键为:{a.keys()}")
    print(f"a的所有值为:{a.values()}")
    # len() 键值对的个数
    print(f"a的键值对个数为:{len(a)}个")
    # 检测一个“键”是否在字典中
    print(f"name是否是字典a的键:{'name' in a}")

  • 字典元素添加、修改、删除 

    a = {'name':'lxx','age':18,'job':'salmer'}
    # 新增键值对,若没有则新增,有则重新赋值
    a['age'] = 20
    a['phone'] = 15910001000
    print(f"a的值为:{a}")
    # del():字典中元素的删除
    del(a['job'])
    print(f"a的值为:{a}")
    # pop() 删除指定键值对,并返回对应的“值对象”
    a.pop('phone')
    print(f"a的值为:{a}")
    # popitem() :随机删除和返回该键值对。字典是“无序可变序列”,因此没有第一个元素、最后一个元素的概念;
    a.popitem()
    print(f"a的值为:{a}")
    # clear() 删除所有键值对
    a.clear()
    print(f"a的值为:{a}")

 

3.元组(tuple),字典(dict)和列表(list)的合并使用

  • 题目来源Convert and Aggregate - python coding challenges - Py.CheckiO
  • 大致要求:传入一个元组列表,每个元组由两个值组成:一个字符串和一个整数。需要创建并返回字典,其中键是来自输入元组的字符串值,值是聚合(求和)
    整数,每个特定键的输入元组中的值。生成的字典不应包含具有空键或零值的项目。
  • 例如:

  • 完整代码:
    def conv_aggr(li:list):
        my_dict = {}
        for k,v in li:
            if k not in my_dict:
                my_dict[k] = v
            else:
                my_dict[k] += v
        for i in list(my_dict.keys()):
            if my_dict[i] == 0:
                del my_dict[i]
        if '' in my_dict.keys():
            del my_dict['']
        return my_dict