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基础(三)—字典和集合

原文地址:https://www.cnblogs.com/l0zh/p/13739760.html