python -- 字典 集合

一、字典
 
       定义:字典是以 key :value 的形式来保存数据,用{} 来表示,存储的是 key : value
       查找效率比较高(注:字典存储数据时,用的是hash值来存储,算法不能变(python)
        数据必须是不可变的(可哈希),字典的key必须是可哈希的(不可变)
       
           列表是可变的,不可哈希
           元组是不可变的,可哈希的
 
二、字典的增删改查
 
    增长
 
        dic[新key] = 值
 
        dic.setdefault()  有添加的功能,若是key存在,不添加
        流程:判断新key是否在字典中存在,若是已经存在了,不作变动;若是不存在,执行添加操做
 
    删除
 
        dic.pop(key) 
        dic.popitem()  随机删除一项,在python早期的版本中,字典是无序的。
        del dic[key]    
        dic.clear()  清空
 
    修改
 
        dic[老key] = 值
        update(dic1)     # 把dic1中的内容更新到dic中,若是key重名,则修改替换,若是不存在key,则新增。
 
    查询 
 
        通常用key来查找具体的数据。
         一、直接使用key就能够拿到value。当key不存在时,报错  
         二、dic.get(key)  当key 不存在返回 None 
                                   当key存在时,返回第二个参数,默认第二个参数为 None
         三、 dic.setdefailt()  第一个功能是添加(当key不存在的时候)  第二个功能是查询(根据你给的key)
                整个执行流程:判断给的key是否存在,若是存在,就不执行新增流程,直接查询出这个key对应的value
                若是key不存在,先执行新增操做,再使用key把对应的value查询出来。
 
      遍历,字典是一个可迭代对象
            
            a,b = 1,2 # 把后面的两个值分别赋值给前面两个变量,解构,解包
            元组和列表是能够解包的
    for k,v in dic.items():
        print(item)
        k,v = item   #解构
        k = item[0]
        v = item[1]
        print(k,v)
 
            遍历字典的两套方案
      一、使用for循环直接遍历字典
dic = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"}
for key in dic:
    print(key)
    print(value)

  

   二、可使用字典的items() +解构能够直接获取到key 和 value python

for k,v in dic.items():
    print(k)
    print(v)

  

三、字典的相关操做
 
        dic.keys()  获取到全部的键值
        dic.values()  获取到全部的值
        dic.items()  获取到全部的键值对
 
四、字典的嵌套
 
        字典的嵌套,字典套字典
 
五、 set 集合
 
        set集合是python的一个基本数据类型。set中的元素是不重复的无序的,里面的元素必须是可hash的(int,str,tuple,bool)
        set 就是dic类型的数据但不保存value,只保存key set也用{}表示
 
        注: set集合中的元素必须是可hash的,但set自己是不可hash的,set是可变的
 
        使用set的不可重复的特性,咱们可使用set来去重  
# 给 list 去重
lst =[45,6,'geg',45,6]
lst = list(set(lst))   #把list转化成set,再转化回list
print(lst)

  

 
 六、set集合的增删改查
 
         一、增长
             s.add('元素')  # 重复的内容不会被添加到set集合中
 
             s.update('元素')   #迭代更新
 
          二、删除
    
             item = s.pop()   # 随机弹出一个
             s.remove('元素')   # 若这个元素不存在,删除在会报错
             s.clear()  #清空set集合,清空完以后,会打印为 set(),要和dic区分
 
         三、修改
 
            set集合中的数据没有索引,也没办法去定位一个元素,因此没有办法直接修改
            咱们能够采用先删除后添加的方式来完成修改操做
s = {"刘嘉玲", '关之琳', "王祖贤","张曼⽟", "李若彤"}
# 把刘嘉玲改为赵本⼭
s.remove("刘嘉玲")
s.add("赵本⼭")
print(s)

  

  四、查询
 
             set 是一个可迭代的对象,因此能够进行for循环
 
 
七、set集合的一些其余操做
 
  交集:s1&s2   s1.intersection(s2)
  并集:s1|s2     s1.union(s2)
  差集 :s1 -s2    s1.difference(s2)     获得s1 中单独存在的元素
  反交集(s1^s2)   s1.symmetric_difference(s2)  两个集合中单独存在的元素
  子集:  s1 < s2    s1.issubset(s2)   s1 是 s2 的子集吗?返回  True  or  False
  超集: s1 >s2   s1 是s2 的超集吗? False  or  True
 
 
  set集合自己是能够发生改变的,是不可hash的。咱们能够用frozenset来保存数据。frozenset是不可变的,也就是一个可哈希的数据类型 
s = frozenset(["赵本⼭", "刘能", "⽪⻓⼭", "⻓跪"])
dic = {s:'123'} # 能够正常使⽤了
print(dic)

#{frozenset({'刘能', '⽪⻓⼭', '赵本⼭', '⻓跪'}): '123'}