zoukankan      html  css  js  c++  java
  • Python基础(三)—字典和集合

    字典Dictionary

    字典是一种可变容器模型,且可存储任意类型对象。每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:

       d = {key1 : value1, key2 : value2 }
    
    

    键必须是唯一的,但值则不必。

    • 创建:d = {key1 : value1, key2 : value2 }
    • 访问:dict[‘Age’],当不存在会报错:KeyError: ‘Age’
    • 修改:dict[‘Age’] = 8 # 修改信息
    • 删除
      • pop(key[,default]) <根据key来删除>
      • popitem() <随机删除>
      • dict.clear() # 清空字典
      • del dict[‘Name’] # 删除键 ‘Name’

    循环遍历

    • 遍历字典的key

        for key in dict:
          print(key)
      
        for key in dict.keys():
          print(key)
      
    • 遍历字典的value

        # 字典中的key之后就可以直接通过索引来得到相对应的value
        for key in dict.keys():
            print(dict[key])
      
        # 通过dict.values()来直接遍历索引
        for key in dict.keys():
            print(key)
      
    • 遍历字典的项

        # 通过dict.item()返回的元组数列可以遍历整个结果,每个数据项是一个元组。
        for item in dict.items():
        	print(item)
      
        # 对items进行key和value的遍历。
        for key, value in dict.items():
        	print(key, value)
      

    字典排序

    对生成的字典的结果按照key或者value进行排序,主要用到的方法就是python的内置函数sorted()。sorted()函数的作用是对所有可迭代的对象进行排序操作的函数。

    	sorted(iterable, cmp=None, key=None, reverse=False) 
    	"""
      	iterable:是可迭代的数据类型。
      	cmp:是用于比较的函数,将key指定的关键字通过该函数规定的比较规则进行比较。有点类似java中的Comparable抽象类中的compareTo()方法。传递两个参数,例如f(a,b),指定a和b的逻辑比较规则,结果返回正数、负数或者零来分别表示大于、小于和等于。
      	key:用于进行比较的数据。
      	reverse:排序规则,默认是True降序,或者设置为False来升序。
        """
    
    • 按照key值进行排序

      • 当iterable传入的dict时,dict返回的是对key迭代,所以得到的排序结果也是对key排序后的列表。
          sorted_dict = sorted(dict, key=lambda x:x[0])
          print(sorted_dict)
        
          # ['LiSi', 'WangWu', 'ZhangSan', 'ZhaoLiu']
        
      • 如果传入的是dict.items(),此时传入的是元组,所以排序后返回的结果也是元组的列表。
        sorted_dict = sorted(dict.items(), key=lambda x:x[0])
        print(sorted_dict)
      
        # [('LiSi', 10), ('WangWu', 5), ('ZhangSan', 2), ('ZhaoLiu', 4)]
      
    • 按照value值进行排序
      按照value排序时,只需把key迭代对象选择为x[1]就可以了。

          sorted_dict = sorted(dict.items(), key=lambda x:x[1], reverse=True)
          print(sorted_dict)
      
          # [('LiSi', 10), ('WangWu', 5), ('ZhaoLiu', 4), ('ZhangSan', 2)]
          """
          lambda匿名函数的作用类似:
          def f(x):
          	return x[1]
          """
      

    字典API

    • Python字典包含了以下内置函数
    序号函数描述
    1len(dict)计算字典元素个数,即键的总数。
    2str(dict)输出字典,以可打印的字符串表示。
    3type(variable)返回输入的变量类型,如果变量是字典就返回字典类型。
    • Python字典包含了以下内置方法
    序号函数描述
    1popitem()随机返回并删除字典中的一对键和值(一般删除末尾对)。
    2pop(key[,default])删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
    3radiansdict.clear()删除字典内所有元素
    4radiansdict.copy()返回一个字典的浅复制
    5radiansdict.fromkeys()创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
    6radiansdict.get(key, default=None)返回指定键的值,如果值不在字典中返回default值
    7key in dict如果键在字典dict里返回true,否则返回false
    8radiansdict.items()以列表返回可遍历的(键, 值) 元组数组
    9radiansdict.keys()返回一个迭代器,可以使用 list() 来转换为列表
    10radiansdict.setdefault(key, default=None)和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
    11radiansdict.update(dict2)把字典dict2的键/值对更新到dict里
    12radiansdict.values()返回一个迭代器,可以使用 list() 来转换为列表

    集合set

    集合(set)是一个无序的不重复元素序列。(可以用作去重)

    • 创建:
      一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

        parame = {value01,value02,...}
        或者
        set(value
        # 去重
        basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
        print(basket) # 这里演示的是去重功能
        # {'orange', 'banana', 'pear', 'apple'}
      
    • 添加:

      s.add( x ),如果x存在则不做操作。
      s.update( x ),参数可以是列表,元组,字典等。

        tmpset = set('123')
        tmp = ['aa', 'bb']
        # tmpset.add(listtmp)  # 报错TypeError: unhashable type: 'list'
        tmpset.update(tmp)  # 不报错,添加列表时,所有item均添加
        print(tmpset)  # 每次输出结果均不一致
      
        tmp = ('cc', 'dd')
        tmpset.update(tmp)  # 添加元组时,所有item均添加
        print(tmpset)  # 每次输出结果均不一致
      
        tmp = {4: 'ee', 5: 'ff'}
        tmpset.update(tmp)  # 添加元组时,所有键值添加、item不添加
        print(tmpset)  # 每次输出结果均不一致
      
        """
        	{'3', 'aa', '2', 'bb', '1'}
        	{'3', 'aa', 'cc', '2', 'bb', '1', 'dd'}
        	{'3', 'aa', 'cc', 4, 5, '2', 'bb', '1', 'dd'}
        """
      
    • 移除:

      s.remove( x ),将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。
      s.discard( x ),移除集合中的元素,且如果元素不存在,不会发生错误
      s.pop() ,随机删除集合中的一个元素。在交互模式下,pop 是删除集合的第一个元素(排序后的集合的第一个元素)。

        >>>thisset = set(("Google", "Runoob", "Taobao", "Facebook"))
        >>> thisset.pop()
        'Facebook'
        >>> print(thisset) 
        {'Google', 'Taobao', 'Runoob'}
      

      s.clear(),清空集合。

    • 集合的运算

      • 交差并
        >>> a = set('abracadabra')
        >>> b = set('alacazam')
        >>> a
        {'a', 'r', 'b', 'c', 'd'}
        >>> a - b # 集合a中包含而集合b中不包含的元素
        {'r', 'd', 'b'}
        >>> a | b # 集合a或b中包含的所有元素
        {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
        >>> a & b # 集合a和b中都包含了的元素
        {'a', 'c'}
        >>> a ^ b # 不同时包含于a和b的元素
        {'r', 'd', 'b', 'm', 'z', 'l'}
      
      • 列表推导
        >>>a = {x for x in 'abracadabra' if x not in 'abc'}
        >>> a
        {'r', 'd'}
      
    • 查询
      x in s

    内置方法

    集合内置方法完整列表

    序号方法描述
    1add()为集合添加元素
    2update()为集合添加元素,不报错,可以添加列表、元组、字典等
    3clear()移除集合中的所有元素
    4copy()拷贝一个集合
    5pop()随机移除元素
    6remove()移除指定元素
    7difference()返回多个集合的差集
    8difference_update()移除集合中的元素,该元素在指定的集合也存在。
    9discard()删除集合中指定的元素
    10intersection()返回集合的交集
    11intersection_update()删除集合中的元素,该元素在指定的集合中不存在。
    12isdisjoint()判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
    13issubset()判断指定集合是否为该方法参数集合的子集。
    14issuperset()判断该方法的参数集合是否为指定集合的子集
    15symmetric_difference()返回两个集合中不重复的元素集合。
    16symmetric_difference_update()移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
    17union()返回两个集合的并集

    个人博客:Loak 正 - 关注人工智能及互联网的个人博客
    文章地址:Python基础(三)—字典和集合

  • 相关阅读:
    Map容器家族(LinkedHashMap源码详解)
    树篇3-平衡二叉查找树之红黑树
    树篇2-平衡二叉查找树之AVL树
    树篇1-二叉查找树
    Map容器家族(HashMap源码详解)
    位运算符的基本使用和注意事项
    android中获取屏幕的信息
    获取activity的根视图
    初来咋到,请多指教
    linux死机解决办法
  • 原文地址:https://www.cnblogs.com/l0zh/p/13739760.html
Copyright © 2011-2022 走看看