05,.字典,集合

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)
 
posted @ 2018-11-30 21:58  杨洪涛  阅读(196)  评论(0编辑  收藏  举报