zoukankan      html  css  js  c++  java
  • Day-05 基础数据类型字典dict

    一、认识字典
    字典是成对的保存数据,以key:value的形式保存,用{}表示,每一项内容都是key:value,每项数据之间用逗号隔开
    字典中的key是不能重复的。存储是依靠着key来计算的。
    切记:在字典中存储的key-value中的key必须是可hash的,如果你搞不懂什么是哈希,暂时可以这样记,可以改变的都是不可哈希的,那么可哈希就意味着不可变,这个是为了能准确的计算内存地址而规定的。
    已知的可哈希(不可变)的数据类型:str、int、tuple、bool
    不可哈希(可变)的数据类型:list、dict、set
    二、字典的增删改查
    1、增加
    dic[key] = value
    setdefault(key, value)
    dic = {}
    dic['name'] = '周润发' # 如果dict中没有出现这个key, 就会新增⼀个key-value的组合进dict
    dic['age'] = 18
    print(dic)

    结果:
    {'name': '周润发', 'age': 18}

    # 如果dict中没有出现过这个key-value. 可以通过setdefault设置默认值 dic.setdefault('李嘉诚') # 也可以往⾥⾯设置值. dic.setdefault("李嘉诚", "房地产") # 如果dict中已经存在了. 那么setdefault将不会起作⽤,这个要记得 print(dic)

    结果:
    {'name': '周润发', 'age': 18, '李嘉诚': None} 字典增加操作
    2、删除

    dic = {"黄日华": "天龙八部", "吕颂贤": "笑傲江湖", "苏有朋": "倚天屠龙记", "六小龄童": "西游记"}
    # dic.pop("吕颂贤") # 指定key删除
    # dic.popitem()  # 随机删除
    # del dic["黄日华"]  # 删除
    # dic.clear() # 清空字典
    
    print(dic)
    
    
    3、修改
      dic[key] = value
      dic1.update(dict2)

    dic = {"刘能": "王小利", "赵四": "刘晓光", "王木生": "范伟", "谢大脚": "于月仙", "李大国": "小鬼"}
    dic['王木生'] = "刘伟"

    结果:
    {'刘能': '王小利', '赵四': '刘晓光', '王木生': '刘伟', '谢大脚': '于月仙', '李大国': '小鬼'}

    dic2 = {"刘能": "大阳哥", "赵四": "github", "王木生": "汪峰", "谢大脚": "冯提莫", "王大拿": "金老板"} dic.update(dic2) print(dic)

    把dict2 更新到dic
    结果:
    {'刘能': '大阳哥', '赵四': 'github', '王木生': '汪峰', '谢大脚': '冯提莫', '李大国': '小鬼', '王大拿': '金老板'}


    1 dic = {"id": 123, "name": 'sylar', "age": 18}
    2 dic1 = {"id": 456, "name": "麻花藤", "ok": "wtf"}
    3 dic.update(dic1) # 把dic1中的内容更新到dic中. 如果key重名. 则修改替换. 如果不存在key, 则新增.
    4 print(dic)
    5 print(dic1)
    4、查询
      dic[key] 可能会报错
      dic.get(key)
      dic.setdefault()

    dic = {'刘能': '大阳哥', '赵四': 'github', '王木生': '汪峰', '谢大脚': '冯提莫', '李大国': '小鬼', '王大拿': '金老板'}
    # 1. 最直观。 直接用key
    print(dic['周杰伦'])  # 当这个key不存在的时候会报错
    # 2. get方法
    print(dic.get("谢大脚", "周杰伦不在这里"))  # 没有key. 返回None
    # 3. setdefault()  1. 新增(先看有没有key, 如果有就过, 如果没有,执行新增) 2.根据key把值返回
    dic = {}
    dic["盖伦"] = "德玛西亚之力"
    value = dic.setdefault("菲奥娜", "无双剑姬")  # 新增
    value2 = dic.setdefault("盖伦", "刘伟")  # 由于已经存在了key。 所以新增不执行。 直接查询结果
    value3 = dic.setdefault("薇恩", "")
    
    print(value3)
    print(dic)

    重要******
    三、常见操作
    keys() key的集合
    values() value的集合
    items() 键值对的集合(key,value)

    dic = {"汪峰": "大陆音乐半壁江山", "周杰伦": "亚洲音乐天王", "罗志祥": "亚洲舞王"}
    
    对字典的遍历
    print(dic.keys())   # dict_keys(['汪峰', '周杰伦', '罗志祥']) 像列表但不是列表
    for key in dic.keys():
        print(key)  # 拿到key
        print(dic[key]) # 拿到value
    
    print(dic.values())
    for value in dic.values():
        print(value)
    
    
    也可以遍历字典*****************************************************************
    [('汪峰', '大陆音乐半壁江山'), ('周杰伦', '亚洲音乐天王'), ('罗志祥', '亚洲舞王')]
    print(dic.items())  # 拿到的是key和value
    for k, v in dic.items(): # 当需要遍历字典. 在操作中涉及到key和value的时候.
        print(k) # 元组
        print(v)
    
    
    字典本身是一个可迭代对象,可以直接进行for循环*********************************
    for el in dic:  # 直接拿到key
        print(el)
        print(dic[el])
    
    前面的变量的个数和后面解包的个数一致
    a, b = (10, 20) # 解构, 解包
    print(a)
    print(b)
    四、字符串嵌套


    # 字典的嵌套
    dic1 = {
     "name": "汪峰",
     "age": 18,
     "wife": {
     "name": '章⼦怡',
     "age": 28
     },
     "children": ['第⼀个⽑孩⼦', '第⼆个⽑孩⼦'],
     "desc": '峰哥不会告我吧. 没关系. 我想上头条的'
    }
    print(dic1.get("wife").get("name"))
    print(dic1.get("children"))
    print(dic1.get("children")[1])



  • 相关阅读:
    Oracle数据库中心双活之道:ASM vs VPLEX
    使用Visual C ++和Open Folder自定义环境
    HDU 2563 统计问题(递归,思维题)
    彻底搞定C语言指针(精华版)
    HDU 1000 A + B Problem(指针版)
    图的基本算法(BFS和DFS)
    HDU 1312 Red and Black(DFS,板子题,详解,零基础教你代码实现DFS)
    C语言求最小公倍数和最大公约数三种算法(经典)
    HDU 2504 又见GCD(最大公约数与最小公倍数变形题)
    HDU 2502 月之数(二进制,规律)
  • 原文地址:https://www.cnblogs.com/xiaomai-rhce/p/10319403.html
Copyright © 2011-2022 走看看