zoukankan      html  css  js  c++  java
  • 第六天

    1.字典简介

      字典(dict) python中唯一的映射类型,根据key计算内存地址,再以key:value保存在这个地址里面

      hash算法无序的 故而key必须是可hash的(如果你搞不懂什么是可哈希,暂可记成,可改变的都不可哈希的)

      可哈希(不可改变)的数据类型: int,str,tuple,bool 

      不可哈希(可改变)的: list,dict,set

      字典的key必须是可哈希的,不可变 value随便改

    1 # 语法 {key1:value1,key:value2,key:value3...}
    2 dic ={123:456,True:999,"id":5,"name":"赛丽亚","stu":"精灵"}
    3 print(dic)
    4 dic ={[1,2,5]:666,}  # TypeError [1,2,5] list可变的

      注意:dict保存的数据不并是按我们添加进去的顺序保存的.是按hash表顺序保存的.而hash表不连续.

      所以不能进行切片工作.它只能通过key来获取dict中的数据

      

      字典的增删改查与其他操作:

    dic = {123:456,True:999,"id":5,"name":"赛丽亚","stu":"精灵"}
    1 # 1.增加
    2 dic ["007"] = "666"  # 没有出现的key会添加上
    3 dic ["001"] = "策划"
    4 print(dic)
    5 # .setdefault()
    6 # 流程 先判断key是否存在 若存在 不执行新增 若不存在 执行新增
    7 dic.setdefault("001","系统") # key不存在 新增
    8 dic.setdefault("001","策划") # key存在 setdefault不新增
    9 print(dic)
    1 # 2.删除 .pop()  .popitem()  .clear()  del()
    2 dic = {"张无忌":'倚天屠龙记', "紫薇":"还珠格格", "王语嫣":"天龙八部", "刘能":"乡村爱情协奏曲"}
    3 dic.pop("刘能")  # 指定key删除
    4 dic.pop("张无忌")
    5 dic.popitem() # 随机删除
    6 dic.popitem() # python3.5以上显示为 按输入顺序从最后一个删除 实际底层仍是无序随机删除的
    7 dic.clear()  # 清空
    8 del dic["刘能"]  # 类似pop 但底层也删掉了
    9 print(dic)
    1 # 3.修改 .update()
    2 dic = {"张无忌":'倚天屠龙记', "紫薇":"还珠格格", "王语嫣":"天龙八部", "刘能":"乡村爱情协奏曲"}
    3 dic ["刘能"] = "乡村爱情" # dic[已存在的key] = 新value  修改
    4 print(dic)
    5 dic1 ={"张无忌":"明教教主","紫薇":"还珠第二部","乔峰":"丐帮帮主"}
    6 dic.update(dic1) # 把dic1的内容覆盖到dic中 存在的key修改value 不存在的新增
    7 print(dic)
     1 # 4.查询
     2 # 一般用 key 来查找具体的数据
     3 dic = {"张无忌":'倚天屠龙记', "紫薇":"还珠格格", "王语嫣":"天龙八部", "刘能":"乡村爱情协奏曲"}
     4 print(dic["紫薇"])  # dic[key] 输出 value 还珠格格
     5 # print(dic["尔康"])  # 若key不存在 报错 KeyError: '尔康'
     6 print(dic.get("王语嫣"))  # dic.get[key] 输出 value 天龙八部
     7 print(dic.get("小燕子"))  # 若key不存在 不会报错 返回 None
     8 print(dic.get("刘能","没有"))  # 两个参数 若第一个参数不存在 返回第二个参数作为默认值 若存在 直接返回value
     9 
    10 # setdefault() 新增
    11 # 流程: 1.先检测是否存在 kye,xxx
    12 #        2.根据你给的key查询value
    13 dic = {"jay":"周杰伦"}
    14 dic1 = dic.setdefault("JJ","林俊杰")
    15 print(dic1)

    练习题

     1 # 把列表转化到字典里面去 key1:[大于66的数据], key2:[小于等于66]
     2 # dic = {key1:[大于66的],key2:[小于等于66]}
     3 方案1:
     4 dic ={"key1":[],"key2":[]}
     5 lis = [11,22,33,44,55,88,66,77,99]
     6 for i in lis:
     7     if i > 66:
     8         dic["key1"].append(i)
     9     else:
    10         dic["key2"].append(i)
    11 print(dic)
    12 
    13 
    14 方案2:
    15 lis = [11,22,33,44,55,88,66,77,99]
    16 dic = {}
    17 for i in lis:
    18     if i > 66:
    19         dic.setdefault("key1",[]).append(i)
    20     else:
    21         dic.setdefault("key2",[]).append(i)
    22 print(dic)

      字典的相关操作 .keys() .values() .items()

     1 dic = {"DNF":"剑魂","LOL":"钻石","龙之谷":"箭神","顺火暖":"九灵","剑网三":"天香"}
     2 
     3 print(dic.keys())  # 返回内容像列表 但不是列表
     4 for i in dic.keys():  # 可以迭代 拿到的是每一个key
     5     print(i)
     6 
     7 print(dic.values())  # 所有的value返回 像列表但不是列表
     8 for i in dic.values(): # 迭代 拿到的是每一个value
     9     print(i)
    10 
    11 print(dic.items())  # 返回键值对 (key,value)
    12 for item in dic.items():
    13     print(item)     # item是元组 (key,value)

      字典遍历最好方案:

     1 #好的遍历字典方案   *重点
     2 for k,v in dic.items():   # item是元组 (key,value)
     3     print(k,v)    # 解包 拿到key,value
     4 
     5 #相关知识 解构解包
     6 # a,b = 1,2  # 等同a,b = (1,2)
     7 a,b,c = 1,2,3
     8 print(a,b)
     9 
    10 #真正的字典迭代
    11 for k in dic:
    12     print(k)  # 直接拿到的是key
    13     print(dic[k])  # 拿到value

      字典嵌套:

      类似列表数框框,如:

     1 # 字典的嵌套
     2 dic = {
     3     "name":"汪峰",
     4     "age":48,
     5     "hobby":"抢头条",
     6     "代表作":["春天里","怒放的生命","存在"],
     7     "wife_now":{'name':'章子怡',
     8                 'age':'50',
     9                 '爱好':'打麻将'
    10                 },
    11     "children":[{'id':1,"name":"汪涵"},{"id":2,"name":"汪才"}]
    12 }
    13 print(dic["代表作"][2])
    14 print(dic["wife_now"]["爱好"])
    15 # 改名字
    16 dic["children"][0]["name"] = "汪旺"
    17 dic["children"][1]["name"] = "汪财"
    18 print(dic)

    continue...

  • 相关阅读:
    2017-2018-2 20172314 『Java程序设计』课程 结对编程练习_四则运算
    20172314 2017-2018-2 《程序设计与数据结构》第八周学习总结
    2017-2018-2 20172314 『Java程序设计』课程 结对编程练习_四则运算
    学号 2017-2018-20172309 《程序设计与数据结构》课堂测试修改报告
    学号 2017-2018-20172309 《程序设计与数据结构》第9周学习总结
    2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算_第二周
    学号 2017-2018-20172309 《程序设计与数据结构》第8周学习总结
    2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算——第一周
    2017-2018-20172309 《程序设计与数据结构》实验二报告
    学号 2017-2018-20172309 《程序设计与数据结构》第7周学习总结
  • 原文地址:https://www.cnblogs.com/xi1419/p/9838586.html
Copyright © 2011-2022 走看看