zoukankan      html  css  js  c++  java
  • Python-基础知识-字典dict和集合set

    字典

    Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

    如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Python写一个dict如下:

    >>> stu = {'Michael': 95, 'Bob': 75, 'Tracy': 85}    #创建字典
    >>> stu['Michael']
    95
    

    字典的特性:

    • dict是无序的
    • key必须是唯一的,所以自动去重

    字典的基本操作:

    • 增加
    • 删除
    • 修改
    • 查找

    一、增加和修改

    >>> info = {
    ...     'stu1101': "TengLan Wu",
    ...     'stu1102': "LongZe Luola",
    ...     'stu1103': "XiaoZe Maliya",
    ... }    #创建一个字典info
    >>>
    >>> info
    {'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola'}
    >>> info["stu1104"] = "苍井空"    #增加一个,如果没有这个键就增加,否则就修改这个键
    >>> info
    {'stu1104': '苍井空', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola'}
    

     二、删除

    >>> info.pop("stu1101")    #字典的内置方法,删除键名为stu1101
    'TengLan Wu'
    >>> info
    {'stu1104': '苍井空', 'stu1103': 'XiaoZe Maliya', 'stu1102': 'LongZe Luola'}
    >>> del info['stu1103']    #python自带的删除方法,删除键名为stu1103
    >>> info
    {'stu1104': '苍井空', 'stu1102': 'LongZe Luola'}
    >>> info.popitem()    #随机删除一个
    ('stu1104', '苍井空')
    >>> info
    {'stu1102': 'LongZe Luola'}
    

     三、查找

    >>> 'stu1102' in info     #判断成员关系
    True
    >>> info.get('stu1102')  #查找方法,如果查找对象不存在,此方法不报错,没有返回结果
    'LongZe Luola'
    >>> info['stu1105']    #此方法查找不存在的对象会报错
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'stu1105'
    

     四、获取字典中所有键名、值和键值对

    >>> info = {
    ...     'stu1101': "TengLan Wu",
    ...     'stu1102': "LongZe Luola",
    ...     'stu1103': "XiaoZe Maliya",
    ... }
    >>>
    >>>
    >>> info.values()    #获取值
    dict_values(['XiaoZe Maliya', 'TengLan Wu', 'LongZe Luola'])
    >>> info.keys()    #获取键名
    dict_keys(['stu1103', 'stu1101', 'stu1102'])
    >>> info.items()    #获取键值对,以list的方式返回
    dict_items([('stu1103', 'XiaoZe Maliya'), ('stu1101', 'TengLan Wu'), ('stu1102', 'LongZe Luola')])
    

     五、setdefault方法

    >>> info.setdefault("stu1106","Alex")
    'Alex'
    >>> info
    {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
    >>> info.setdefault("stu1102","龙泽萝拉")  #因为字典中已有stu1102,并且字典有自动去重功能
    'LongZe Luola'
    >>> info
    {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
    

     六、update方法

    >>> info
    {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
    >>> b = {1:2,3:4, "stu1102":"龙泽萝拉"}
    >>> info.update(b) #将字典b加入到字典info中
    >>> info
    {'stu1102': '龙泽萝拉', 1: 2, 3: 4, 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
    

     七、循环字典

    #方法1,建议使用
    for key in info:
        print(key,info[key])
    
    #方法2
    for k,v in info.items(): #会先把dict转成list,数据里大时莫用
        print(k,v)
    

     八、多级嵌套字典及字典

    >>> football = {
    ...         '英超':{
    ...             '曼联':{
    ...                 '积分':60,
    ...                 '进球':45,
    ...                 '排名':1
    ...             },
    ...             '阿森纳':{
    ...                 '积分':55,
    ...                 '进球':30,
    ...                 '排名':4
    ...             },
    ...             '切尔西':{
    ...                 '积分':59,
    ...                 '进球':40,
    ...                 '排名':2
    ...             }
    ...         },
    ...         '中超':{
    ...             '广州恒大':{
    ...                 '积分':45,
    ...                 '进球':25,
    ...                 '排名':1
    ...             },
    ...             '上海上港':{
    ...                 '积分':20,
    ...                 '进球':10,
    ...                 '排名':2
    ...             },
    ...             '江苏苏宁':{
    ...                 '积分':30,
    ...                 '进球':40,
    ...                 '排名':3
    ...             }
    ...         },
    ...         '西甲':{
    ...             '巴萨':{
    ...                 '积分':60,
    ...                 '进球':55,
    ...                 '排名':1
    ...             },
    ...             '皇马':{
    ...                 '积分':55,
    ...                 '进球':59,
    ...                 '排名':2
    ...             },
    ...             '马竞':{
    ...                 '积分':55,
    ...                 '进球':58,
    ...                 '排名':3
    ...             }
    ...         }
    ...     }
    >>> football['中超']['广州恒大']
    {'进球': 25, '积分': 45, '排名': 1}
    >>> football['中超']['广州恒大']['积分']
    45
    

     集合

      set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

    集合的主要作用:

    • 去重,把一个列表变成集合,就自动去重了
    • 关系测试,测试两组数据之前的交集、差集、并集等关系

    集合的基本操作:

    • 创建
    • 增加
    • 删除

    一、创建

    >>> set1 = set([1,3,4,5,99,54,22])
    >>> set2 = set([3,22,5,6,7,10,4])
    >>> set1
    {1, 99, 3, 4, 5, 54, 22}
    >>> set2
    {3, 4, 5, 6, 7, 10, 22}
    >>>
    >>> set3 = set("Hello")    #创建一个唯一字符的集合
    >>> set3
    {'e', 'l', 'H', 'o'}
    

    二、增加

    >>> set1.add(20)
    >>> set1
    {1, 99, 3, 4, 5, 20, 54, 22}
    >>> set2.update([10,37,42])
    >>> set2
    {3, 4, 5, 6, 7, 37, 10, 42, 22}
    

    三、删除

    >>> set1.remove(1)    #如果元素不存在,会报错
    >>> set1
    {99, 3, 4, 5, 54, 22}
    >>> set1.discard(100)    #如果元素存在就删除,不存在则do nothing
    >>> set1
    {99, 3, 4, 5, 54, 22}
    >>> set1.pop()    #使用pop()随意删除一个
    99
    >>> set1
    {3, 4, 5, 54, 22}
    >>> len(set1)    #set 的长度
    5
    

    四、集合

    >>> set1 = set([1,3,4,5,99,54,22])
    >>> set2 = set([3,22,5,6,7,10,4])
    >>> set1
    {1, 99, 3, 4, 5, 54, 22}
    >>> set2
    {3, 4, 5, 6, 7, 10, 22}
    #包含set1和set2中的每一个元素,取并集(即A和B)
    >>> set1.union(set2)
    {1, 99, 3, 4, 5, 6, 7, 10, 54, 22}
    >>> set3 = set1 | set2
    >>> set3
    {1, 99, 3, 4, 5, 6, 7, 10, 54, 22}
    #包含set1和set2中相同的元素,取交集(即AB中都有的)
    >>> set1.intersection(set2)
    {3, 4, 5, 22}
    >>> set3 = set1 & set2
    >>> set3
    {3, 4, 5, 22}
    #包含set1中有但是set2中没有的元素,取差集(即A有B没有)
    >>> set1.difference(set2)
    {1, 99, 54}
    >>> set3 = set1 - set2
    >>> set3
    {1, 99, 54}
    #包含set1和set2中不重复的元素,取对称差集(即A有B没有,B有A没有)
    >>> set1.symmetric_difference(set2)
    {1, 6, 7, 99, 10, 54}
    >>> set3 = set1 ^ set2
    >>> set3
    {1, 6, 7, 99, 10, 54}
    #set4是否set5的子集
    >>> set4 = set([1,2,3,4,5,6,7,8,9])
    >>> set4
    {1, 2, 3, 4, 5, 6, 7, 8, 9}
    >>> set5 = set([1,3,5,7,9])
    >>> set5
    {1, 3, 5, 9, 7}
    >>> set4.issubset(set5)
    False
    >>> set4
    {1, 2, 3, 4, 5, 6, 7, 8, 9}
    >>> set6 = set4 <= set5
    >>> set6
    False
    #set4是否包含set5的全部元素
    >>> set4.issuperset(set5)
    True
    >>> set4
    {1, 2, 3, 4, 5, 6, 7, 8, 9}
    >>> set6 = set4 >= set5
    >>> set6
    True
    

    五、成员关系测试

    >>> set7 = set([1,2])
    >>> set7
    {1, 2}
    >>> 1 in set7    #测试1是否是set7的成员
    True
    >>> set7 = set([1,2,100])
    >>> set7
    {1, 2, 100}
    >>> 100 not in set7    #测试100是否不是set7的成员
    False
    
  • 相关阅读:
    Fedora/CentOS使用技巧
    Haproxy配置
    iscsi使用教程
    Linux网络配置
    Linux命令使用
    luogu-1908 逆序对 离散化+树状数组
    算法题目签到表
    [笔记-机器学习]贝叶斯分类器的原理及实现
    [笔记-数据结构]树状数组
    [笔记-数据结构]哈希表
  • 原文地址:https://www.cnblogs.com/kirusx/p/6523657.html
Copyright © 2011-2022 走看看