欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

05,.字典,集合

程序员文章站 2022-05-18 22:52:40
1.什么是字典 字典是以key:value的形式来保存数据,用{}表示. 存储的是key:value 坑: 字典存储数据的时候是用的hash值来存储. 算法不能变(python的) # 数据必须是不可变的(可哈希). 字典的key必须是可哈希的(不可变). dic = {"jay":"周杰伦", " ......
1.什么是字典
字典是以key:value的形式来保存数据,用{}表示.   存储的是key:value
坑: 字典存储数据的时候是用的hash值来存储. 算法不能变(python的)
# 数据必须是不可变的(可哈希). 字典的key必须是可哈希的(不可变).
dic = {"jay":"周杰伦", "jj": "林俊杰", "jolin":"蔡依林"}
print(dic['jay']) # 周杰伦
dic['jay'] = "麻花藤"       #字典的key是不变的,可以通过key来带出value的信息
2.字典的增删改查
   1.增加,添加:
   dic[新key] = 元素
dic = {"意大利": "李云龙", "美国": "美国往事"}
dic["日本"] = "东京审判"  # 新key表示添加
dic['韩国'] = "釜山行
dic["日本"] = "鬼片"
   setdefault()(难点)   有添加的功能,如果key是存在的,不添加,    setdefault("","")
dic = {"意大利": "李云龙", "美国": "美国往事"}
dic.setdefault("美国", "三傻大闹宝莱坞")
print(dic)
    2.删除
    pop(key) 主要要记得,删除key后,同value一起删除掉
dic = {"张艺谋":"红高粱", "李安":"断臂山", "陈凯歌":"霸王别姬", "郭德纲":"祖宗十九代"}
dic.pop("郭德纲")
print(dic)     #{'张艺谋': '红高粱', '李安': '断臂山', '陈凯歌': '霸王别姬'}
    popitem()   随机删除一项,在python早期的版本,字典是无序的
dic = {"张艺谋":"红高粱", "李安":"断臂山", "陈凯歌":"霸王别姬", "郭德纲":"祖宗十九代"}
dic.popitem()   # 随机删除一项. 在python早期版本  字典是无序的.
print(dic)   #{'张艺谋': '红高粱', '李安': '断臂山', '陈凯歌': '霸王别姬'}
    clear()   清空字典中的所有内容
    del dic["key"]    跟pop的区别在于使用的语法:pop(key)
dic = {"张艺谋":"红高粱", "李安":"断臂山", "陈凯歌":"霸王别姬", "郭德纲":"祖宗十九代"}
del dic["李安"]
print(dic)   #{'张艺谋': '红高粱', '陈凯歌': '霸王别姬', '郭德纲': '祖宗十九代'}
    3.修改
dic[老key] = 值
dic = {"河南":"胡辣汤", "开封": "灌汤包", "武汉":"热干面"}
dic['河南'] = "烩面" # 老key = 值
print(dic)
     update()    更新字典
dic = {"id": 123, "name": 'sylar', "age": 18} 
dic1 = {"id": 456, "name": "麻花藤", "ok": "wtf"} 
dic.update(dic1) # 把dic1中的内容更新到dic中. 如果key重名. 则修改替换. 如果不存 在key, 则新增.
print(dic) 
print(dic1)
     4.查询
     dic[key]
dic1 = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"}     #  直接使用key就可以拿到value 
print(dic1["赵四四"]) # keyerror: '赵四四' key不存在
     get(key,值)
 print(dic1.get("刘能能"))  # none 当key不存在返回none
 print(dic1.get("刘能能", "没有这个人")) # 当key不存在. 返回第二个参数. 默认第二个参数是none
     setdefault("key","value")   第一个功能是天加(当key不存在的时候).   第二个功能是查询(根据你给的key查询).   如果key不存在,先执行新增的操作,在使用key把对应的value查询出来
3.字典的相关操作
       1. keys() 获取到所有的键
dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐"} 
print(dic.keys()) # dict_keys(['id', 'name', 'age', 'ok']) 不⽤管它是什么.当 成list来⽤就⾏ 
for key in dic.keys(): 
print(key)
        2. values() 获取到所有的值
dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐"}
for value in dic.values(): 
print(value)
        3. items() 拿到所有的键值对
dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐"}
print(dic.items()) # dict_items([('id', 123), ('name', 'sylar'), ('age', 18), ('ok', '科⽐')]) 这个东⻄也是list. 只不过list中装的是tuple for key, value in dic.items(): # ?? 这个是解构 
print(key, value)
4..字典的嵌套
   
wf = {
    "name":"汪峰",
    "age":52,
    "hobby":["唱歌", "上头条", "穿皮裤"],
    "wife": {
        "name": "章子怡",
        "age": 49,
        "hobby":["演戏", "上电视", "当导师"],
        "tishen": {
            "name":"萌萌",
            "age":28
        },
        "zhuli":{
           "name":"磊磊",
           "age": 20
        }
    },
    "zhuli":{
        "name":"宝宝",
        "age":23,
        "hobby":["抽烟","喝酒","烫头"]
    },
    "children":[{"name":"汪老大"}, {"name":"汪老二"}]
}
wf['children'][1]["age"] = 2         #在children里面新建字典{"age":"2"}
print(wf)
# print(wf['zhuli']['name'])         #输出名字
print(wf)
# 汪峰老婆替身的名字
print(wf['wife']['tishen']['name'])
# 汪峰老婆的第二个爱好
print(wf['wife']['hobby'][1])
# 汪峰助理的第三个爱好
print(wf['zhuli']['hobby'][2])
 
 
# 汪峰的助理+10岁
wf['zhuli']['age'] = wf['zhuli']['age'] + 10
# 汪峰的老婆添加一个爱好("导戏")
wf['wife']['hobby'].append("导戏") # 添加完毕了
# 删除汪峰助理的"抽烟"爱好
wf["zhuli"]["hobby"].remove("抽烟")
print(wf)

5.集合(不重要).去重复     唯一能用到的点,就是去重复
s = {"周润发", "大润发", "王润发", "周润发"} # 不重复的
print(s)      #{'大润发', '周润发', '王润发'}
集合和字典,是没有索引和切片的
集合中的元素是不可重复的.必须是可哈希的(不可变),字典中的key
lst = ["麻将", "牌九", "骰子", "扑克", "骰子", "扑克", "扑克", "扑克"]
#  把列表转化成集合  x 转化成y类型 y()
 s = set(lst)
 print(s)
# 把集合变回列表
# lst = list(s)
print(lst) # 顺序是乱的
空集合:set()
空元组: tuple()
空列表: list()
非空集合:{123}
新增:
   add   添加    #需要记住的
s = {"刘嘉玲", "赵本山", "莱昂纳多迪卡普里奥", "罗纳尔多"}
s.add("刘嘉玲") 
print(s)
   update   迭代更新
s.update({"刘嘉玲", "刘能", "赵四"}) # 迭代更新
print(s)
删除:
 pop() 随机弹一个,随机删除
ret = s.pop() # 随机删除一个
print(s)
print(ret)
 remove()   指定删除
s.remove("罗纳尔多")
print(s)
修改 :  只能先删除在添加
 s = {"刘嘉玲", "赵本山", "莱昂纳多迪卡普里奥", "罗纳尔多"} 
把罗纳尔多修改成梅西
s.remove("罗纳尔多")
s.add("梅西")
print(s)
 
# 迭代
# for el in s:
#     print(el)
 
 
# s1 = {"门神", "灯神", "灯神你在笑什么?"}
# s2 = {"门神", "灯神", "你俩在干什么?"}
 
# 交集
# print(s1 & s2)
# print(s1.intersection(s2))
 
# 并集
# print(s1 | s2)
# print(s1.union(s2))
 
# # 差集
# print(s1 - s2) # s1中特有的内容
# print(s1.difference(s2))
#
# # 反交集
# print(s1 ^ s2) # 两个集合中特有的内容
# print(s1.symmetric_difference(s2))
 
# 集合本身是可变的数据类型 . 不可哈希
# 集合套集合->不能互相嵌套的
# 集合中的元素必须可哈希(不可变的)
# s = {123}
 
# 如果非要集合套集
# s = frozenset({"哈哈","呵呵"}) # 不可变的数据类型(集合)
# for el in s:
#     print(el)