python学习笔记四(字典&集合)

本篇文章主要记录python中量大容器字典和集合,不要说什么列表、元组这俩是序列,虽然都是用来存储数据的但是其本质是不同。但是在python中序列和容器的使用感受差别实在是太小了,主要是看存储的数据的特征选取合适的数据类型就可以了

字典

  • 定义

    表现形式:{'key1':value1,'key2':value2}
    字典是一种可变的容器,
    字典中的数据采用key-value对进行映射存储(和map有点像)
    字典数据没有顺序
    字典中的数据的索引都是通过键值,因此字典的键完全不能重复,而且只能用不可变类型作为字典的键
    
  • 赋值

    python是一种很灵活的语言因此字典的创建方式也很多,其实只要你在赋值的赋值变量符合字典的表现形式,注意将键值设置为不可变类型,你想怎么赋值就怎么赋值。下面总结了能够见到的创建和赋值方法

    首先让我们从最low的来看吧:
    创建空字典&非空字典
    d = {}
    d = {'name':'小明','age':20,'addr':'中国'}
    

    通过构造函数创建&赋值
    字典的构造函数(dict())

     d = dict()  创建空字典,等同于{}
     d = dict(iterable)   用可迭代对象初始化一个字典
     d = (**kwargs)      关键字传参生成字典
    
        d = dict()
        d = dict([('name','小明'),('age',15)])
        d = dict(name = '小明',age = 15)
  • 基本操作
    对于字典操作可以分为两个部分:基本运算符操作,字典内置函数操作

    添加/修改元素:

    dict[key] = value
    d['name'] = '小明明'
    注:如果改变的键值存在,那么直接修改该键值对应的值,如果键值不存在,那么创建新的的键值并赋值
    对于嵌套类型的字典那么对应的value值是什么类型的数据结构就采用其对应的添加修改方式
    L = ['tom','marry','pat']
    age = [20,30,40]
    d['age'] = age
    d['name'] =L
    d['name'].append('jerry')

    这里写图片描述

删除操作

del dict[key] 根据键值删除字典元素,不返回任何值,直接改变原字典
del dict 直接删除一个字典
dict.clear()清空字典,直接改变原字典
dict.pop(key,defult) 根据键值删除字典元素,如果删除的键值在字典中存在那么返回该value,如果键值不存在那么返回defult值,直接改变原字典
dict.popitem() 随机删除key-value对,返回的是key-value元组,直接改变原字典
d = dict(name = '小明',age = 20,addr = '中国')
#按照关键字传参创建字典
del d['name']
test = d.pop('age',0)
test = d.pop('age',0)
test = d.popitem()
d.clear()
del d

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

访问字典元素

dict.values() 以列表形式返回字典中所有值
dict.keys() 以列表形式放回字典中的所有键
dict.items()返回可迭代对象其中包含key-value

d = dict(name = '小明',age = 20,addr = '中国')
t = d.values()
print(t)
type(t)

这里写图片描述

k = d.keys()
print(k)
type(k)

这里写图片描述

itme = d.items()
print(itme)
type(item)

这里写图片描述

dic.get(key,default)    返回指定键值的值,如果不存在那么返回默认值
d.get('name','不详')
d.get('性别','不详')

这里写图片描述

  • 字典推导式
    用可迭代对象一次生成字典的表达式,emmm事实证明能少写代码就少写代码

    {键表达式:值表达式 for 变量 in 可迭代对象[if 真值表达式]}
    
    生成一个字典,键为[1,9]的整数,值为键的平方
    d = {x:x**2+1 for x in range(10) if x%2 == 0}

    这里写图片描述

集合 set

作为学习了十几年数学的同学们看python集合的定义,就有一种学完降龙十八掌又回去扎马步一样,so easy好吗!!但是作为勤奋爱总结的博主,还是整理了集合的相关操作

  • 定义

    集合是一种可变的容器,集合内的数据对象都是唯一的(熟悉吗?这不就是集合的唯一性!!!)
    集合与字典相同都是无序的存储结构
    集合中的元素必须是不可变的对象
    集合相当于只有key没有value的字典
    
  • 创建方式

     字面值创建:
     set()
     s = {1,2,3}
     构造函数创建:
     set():用于创建一个空的集合对象
     set(iterable):用可迭代对象创建一个新的集合,
     注意这迭代对象一定要是不可变的,那么list、set、dict这种就完全不行了
    
            s = set()
            s = {1,2,3,4}
            s = set("ABC")
            s = set("ABCCBA") #s = {A,B,C}
            s = set({1:"一",2:"二",5:"五",})   
            s = ([1,2,3,2]) #自动做了去重处理\(^o^)/~    

    这里写图片描述
    注意set经常会用来给其他序列去重,简洁、方便、易操作

  • 基本操作
    python中常见序列的的+、-、*、/等操作在set中一般用集合操作来替代

操作 说明
交集& 生成两个集合的交集 s1 = {1,2,3} s2 = {2,3,4} s3 = s1&s2 = {2,3}
并集 生成两个集合的并集 s1 = {1,2,3} s2 = {2,3,4} s3 = {1,2,3,4}
补集- s1 = {1,2,3} s2 = {2,3,4} s3 = s1-s2 = {1}属于s1且不属于s2的集合
对称补集^ s1 = {1,2,3} s2 = {2,3,4} s3 = s1^s2 = {1,4}
子集<__超集> 返回都为布尔类型
==/!= 判断两个集合是否相等
in/not in 判断元素是否在集合中

集合中类的方法

方法 意义
s.add(e) 在集合中添加一个新的元素e;如果元素已经存在,则不添加
s.remove(e) 从集合中删除一个元素,如果元素不存在于集合中,则会产生一个KeyError错误
s.discard(e) 从集合S中移除一个元素e,在元素e不存在时什么都不做;
s.clear() 清空集合内的所有元素
s.copy() 将集合进行一次浅拷贝
s.pop() 从集合S中删除一个随机元素;如果此集合为空,则引发KeyError异常,返回为删除的元素
s.update(s2) 用 S与s2得到的全集更新变量S
  • 集合推导式
    集合推导式是用可迭代对象生成集合的表达式,一般用来去除重复元素

    L = [1,3,5,7,2,4,6,8,1,4,7,9]
    s = set(L)      #采用一般方法去重
    s = {x for x in L}  #采用集合推导式去重

    这里写图片描述
    这里写图片描述
    关于集合的小补充:
    相对于普通的集合还有一种特殊的集合frozenset(),称为固定集合,固定集合的操作与普通集合一样,只不过固定集合是不可变的。

猜你喜欢

转载自blog.csdn.net/patrisk/article/details/80820264