zoukankan      html  css  js  c++  java
  • python基础数据类型之字典(基础三)

    第五章python基础数据类型之字典(基础三)

    python常用数据类型之组合数据类型(非序列类型):字典

    字典介绍

    字典(dict)是python中唯⼀一的⼀一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是 唯⼀一的. 在保存的时候, 根据key来计算出⼀一个内存地址. 然后将key-value保存在这个地址中. 这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key'必须是可hash,字典查询效率非常高。

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

    不可哈希(可变)的数据类型: list, dict, set

    字典的无序的,python3.6版本以上 默认了咱们定义顺序,python3.5以下是随机显示
    

    dic = {"key":"value",1:2,2:3} 键:必须是可哈希(不可变的数据类型),并且是唯一的 值:任意

    字典语法:{key1: value1, key2: value2....}

    dict 以{}表示,每一项用逗号隔开,内部元素用key:value的形式保存数

    dic = {"jj":"林俊杰","jay":"周杰伦",(1,2,3):"陶喆","1":"哈哈"}
    print(dic)
    print(dic[jj]) 			#结果:"林俊杰"
    print(dic[(1,2,3)])  
    
    # dic = {[1, 2, 3]: '周杰伦'}   # list是可变的. 不不能作为key 
    # dic = {{1: 2}: "哈哈哈"}     # dict是可变的. 不不能作为key 
    #dic = {{1, 2, 3}: '呵呵呵'}    # set是可变的, 不不能作为key
    
    

    字典作用:

    字典是存储大量的数据,字典比列表还有大,

    字典的查找值的时候通过key值能够方便,快速,

    字典比较消耗内存 最长用的数据 : 字符串,列表,字典

    字典能够将数据进行关联:dic = {"a":"b","b":"c","c":"d"}

    有明确的对应关系时,推荐使用字典--------json

    # list((1,3,4))  -- 列表
    # tuple([1,2,3])  -- 元组
    
    # s = "{'a':1,'b':2}"
    # print(dict(s))     目前所学的知识点字典不能转换的
    

    5.1 字典的增删改查

    5.1.1 字典的增加

    1. 字典直接添加:dic[键] = 值
    dic = {}
    dic['name'] = "alan" 		# dic[键] = 值
    print(dic)					#结果{'name': 'alan'}
    #用key往里面存数据即可,如果dict中没有出现这个key, 就会新增⼀一个key-value的组合
    dic['age'] = "18"
    print(dic)
    dic["name2"] = "国际周"
    dic["name2"] = "周杰伦" # 如果key已经存在。 那么会替换掉原来的value, 修改
    
    
    1. dic.setdefault()

    如果dict中没有出现过这个key-value. 可以通过setdefault设置默认值

    dic.setdefault("name")
    dic.setdefault("name", "lubi") # 如果存在key,不会执行新增"lubi",setdefault将不起作⽤用 
    
    print(dic)
    
    dic = {"a":"b","b":"c"}
    添加字典
    dic.setdefault("c","aaa")
    print(dic)
    
    dic.setdefault("a","aaa")
    print(dic)
    
    print(dic.setdefault("D"))
    执行1.先去字典查看咱们要添加的键存不存在
    执行2.如果键在字典中存在就不填加,如果要是不存在就添加
    

    5.1.2 字典的删除

    字典删除没有 remove()

    dic = {"a":"b","b":"c","jj":"林俊杰","jay":"周杰伦",(1,2,3):"陶喆"}
    
    print(dic.pop("a"))   #	通过#指定key值删除  pop具有返回值,返回的被删除的值
    print(dic)
    
    del dic   			 # 删除整个字典
    print(dic)
    
    del dic["b"]   		 # 删除指定的键值对
    print(dic)
    
    dic.popitem()# 随机删除
    
    del dic["a"]      	  # 删除
    
    dic.clear()        	  #清空字典中所有的内容
    print(dic)			 # 删除整个字典中的键值对
    

    5.1.3 字典的修改

    直接修改 dic["b"] = "ab"

    dic = {"a":"b","b":"c","jj":"林俊杰","jay":"周杰伦",(1,2,3):"陶喆"}
    dic["b"] = "这是值"   			# 键在字典中存在就是修改,键在字典中不存在就是增加
    print(dic)
    
    dic["jay"] = "双截棍"           # 直接把周杰伦改成双截棍
    print(dic)
    

    dic.update()

    如果key重名. 则修改替换. 如果不不存 在key, 则新增.

    dic2 = {1:2,"a":"a1"}
    dic2.update(dic1)   # update括号里的字典级别高
    print(dic2)
    
    dic = {"jj": "林俊杰", "jay": "周杰伦", (1, 2, 3): "陶喆", "1": "哈哈"}
    dic1 = {"jj": "阿毛", "jay": "周杰伦", (1, 2, 3): "43", "1": "雪碧"}
    
    dic.update(dic1)  # 把dic1中的内容更更新到dic中.如果key重名,则修改替换.,如果不不存在key则新增
    print(dic)
    

    5.1.4字典的查询

    查询一般用key来查找具体的数据

    直接用key查找

    dic = {"jj": "林俊杰", "jay": "周杰伦", (1, 2, 3): "陶喆", "1": "哈哈"}
    print(dic['jj'])		# 存在key
    print(dic['国际周'])	  # 当这个key不存在的时候会报错
    
    

    dic.get()

    print(dic.get("国际周", "周杰伦不在这里"))  # 没有key. 返回None
    

    setdefault()

    新增步骤:1.先看有没有key, 如果有就过, 如果没有,执行新增 2.根据key把值返回 dic = {}

    dic = {}
    dic["jay"] = "不能说的密码"           #添加一组字典元素
    print(dic)
    value = dic.setdefault("jj", "江南")  # 1新增一组,2.再查key值
    print(value)                          #结果:江南
    value2 = dic.setdefault("jay", "青花瓷")  # 已经存在了key为jay,新增不执行。
    print(value2)                              #直接查询结果:不能说的秘密
    

    5.2字典的其他操作

    1. 通过for循环取到keys() values()的值
    2. 实现遍历字典
    for key in dic.keys():
        print(key)              #取到key
    
    for value in dic.values():
        print(value)            #取到value
    
    dic = {"jj": "林俊杰", "jay": "周杰伦", (1, 2, 3): "陶喆", "1": "哈哈"}
    

    print(dic.keys()) # dict_keys (['jj', 'jay', '(1, 2, 3)', '1']) 不是list.当list来⽤.

    dic = {"jj": "林俊杰", "jay": "周杰伦", (1, 2, 3): "陶喆", "1": "哈哈"}
    print(dic.keys())
    for key in dic.keys():
        print(key)              #取到key
        print(dic[key])         #取到value
    
    1. dic.items()

    每一项一项的取值实现遍历字典

    dic = {"jj": "林俊杰", "jay": "周杰伦", (1, 2, 3): "陶喆", "1": "哈哈"}

    print(dic.items()) #取到的值是key和value 元组类型

    dic = {"jj": "林俊杰", "jay": "周杰伦", (1, 2, 3): "陶喆", "1": "哈哈"}
    print(dic.items())
    for item in  dic.items():
        print(item)         #元组类型
        print(item[0],item[1])
    
    1. 解构,解包

      元组和列表都含有解包功能。
      a, b = 1, 2 #前面解包的个数和后面的个数要一致
      print(a, b)
      (c, d) = 3, 4
      print(c, d)
      e, f = [1, 2, 3] # 前面解构的时候注意数量量必须匹配
      print(e, f)

    dic = {"jj": "林俊杰", "jay": "周杰伦", (1, 2, 3): "陶喆", "1": "哈哈"}
    print(dic.items())
    for k v in  dic.items():	#需要遍历字典,操作中涉及到key和value
        print(k)         		#元组类型
        print(v)
    

    5.3字典的嵌套

     dic1 = {
         "name": "杰哥",
         "age": 31,
         "wife":{
             "name": '静雯',
             "age": 38
         },
         "children": ['桐妹', '布布'],
         "desc": ' 我想上头条' }
    print(dic1.get("wife").get("name"))
    print(dic1.get("children"))
    print(dic1.get("children")[1])
    

    5.3.1字典嵌套取值

    dic = {
        101:{1:["周伦","林杰"],2:{"汪":["国际章",{"妻1":["熊大","熊二"]},
                                      {"妻2":["葫芦娃","木吒"]}]}},
        102:{1:["李龙","吴京京","李杰杰"],2:{"谢锋锋":["张柏","王菲菲"]},
             3:["alex","wusir","大象","奇奇"]},
        103:{1:["郭美","爹"],2:{"王玉强":{"马荣":"宋吉吉"}}},
        201:{1:["凹凸曼","皮卡丘"],2:{"朱怼怼":{"杨密密":"刘威威"}}}
    }
    
    print(dic[101][2]["汪峰峰"][2]["妻2"][0])
    ['国际章', {'妻1': ['熊大', '熊二']}, {'妻2': ['葫芦娃', '木吒']}]
    {'妻2': ['葫芦娃', '木吒']}
    ['葫芦娃', '木吒']
    
    home1 = dic[102][3][2]
    {1: ['李龙', '吴京京', '李杰杰'],
    2: {'谢锋锋': ['张柏', '王菲菲']},
    3: ['alex', 'wusir', '大象', '奇奇']}
    print(home1)
    
    print(dic[103][2]["王玉强"]["马荣"])
    
    
    
  • 相关阅读:
    简单工厂模式
    1.go的Hello
    Scrapy003-项目流程
    Django1.9开发博客(6)- 模板继承
    Django开发博客- 页面美化
    Django开发博客- 三部曲
    Django开发博客- 部署
    Django开发博客- 模型
    Django开发博客 入门篇
    内装式模块
  • 原文地址:https://www.cnblogs.com/yueling314/p/11000508.html
Copyright © 2011-2022 走看看