zoukankan      html  css  js  c++  java
  • 2018.07.05 字典知识整理

    . 字典的简单介绍
    字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是

    唯一的. 在保存的时候, 根据key来计算出一个内存地址. 然后将key-value保存在这个地址中.

    这种算法被称为hash算法,所以, 切记, 在dict中存储的key-value中的key'必须是可hash的,

    如果你搞不懂什什么是可哈希, 暂时可以这样记, 可以改变的都是不可哈希的,

    那么可哈希就意味着不可变. 这个是为了了能准确的计算内存地址⽽而规定的.

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

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

    简而言之:   字典     是用大括号{} 括起来. 内部使用key:value的形式来保存数据,不是按照我们保存的顺序保存的, 无序的

     

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

     

    注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据

     

     1. dic = {123: 456, True: 999, "id": 1, "name": 'sylar', "age": 18, "stu": ['帅哥', '美女'], (1, 2, 3): '麻花藤'}

      #  合法的        打印内容

      print(dic[123])  ======>   456
      print(dic[True])   ======>   999
      print(dic['id'])         ======>   1
      print(dic['stu'])  ======>   ['帅哥', '美女']
      print(dic[(1, 2, 3)])  =====>    麻花藤

      #  不不合法
      dic = {[1, 2, 3]: '周杰伦'}          # list是可变的. 不不能作为key
      dic = {{1: 2}: "哈哈哈"}            # dict是可变的. 不不能作为key
      dic = {{1, 2, 3}: '呵呵呵'}         # set是可变的, 不不能作为key

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

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

     

      3. 字典的常用方法

      1. keys() 返回所有字典的key的集合(高仿列表)

      2. values() 返回所有的value的集合

      3. items() 返回键值对. 元组

    二.字典的增删改查和其他相关操作

      1.增

        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将不不会起作用

        

        dic = {"及时雨":"宋江", "小李广":"花荣", "黑旋风":"李逵", "易大师":"剑圣"}
        dic["大宝剑"] = "盖伦" # 新增
        dic["及时雨"] = "天老爷" # 修改
        print(dic["易大师是个脑残"])       # 查询, 如果key不存在,报错
        print(dic.get("易大师", "余小C"))        # 如果key不存在. 返回None
        get()      #可以通过key来获取value的值. 那么如果key不存在. 返回None.        可以给出一个默认值. 当key不存在的时候返回默认值

     

      2.删

        dic = {123: 456, True: 999, "id": 1, "name": 'sylar', "age": 18, "stu": ['帅哥', '美女'], (1, 2, 3): '麻花藤'}

        ret = dic.pop('name')

        print(ret)   =====>    sylar

     

        del dic['name']

        print(dic) ===>  {123: 456, True: 999, "id": 1, "age": 18, "stu": ['帅哥', '美女'], (1, 2, 3): '麻花藤'}

        #   del   删除的时候不能得到反还值

        

        # 随机删除.
        ret = dic.popitem()

        # 清空字典中的所有内容

        dic.clear()

     

      3.改  

        dic = {"id": 123, "name": 'sylar', "age": 18}

        dic1 = {"id": 456, "name": "麻花藤", "ok": "wtf"}

        dic.update(dic1)         # 把dic1中的内容更更新到dic中. 如果key重名. 则修改替换. 如果不存在key, 则新增.

        print(dic)   =====>     {"id": 123, "name": 'sylar', "age": 18, "id": 456, "name": "麻花藤", "ok": "wtf"}

        print(dic1) =====>     {"id": 456, "name": "麻花藤", "ok": "wtf"}

     

     

      4.查询

        dic =  {"id": 123, "name": 'sylar', "age": 18, "id": 456, "name": "麻花藤", "ok": "wtf"}

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

        print(dic['name'])

        # print(dic['sylar']) # 报错

        print(dic.get("ok"))

          print(dic.get("sylar"))      # None

          print(dic.get("sylar", "牛B"))     # 牛B

        Python 字典(Dictionary) get() 函数返回指定键,如果键不在字典中返回默认值。

      5.其他操作

        dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科比"}

        print(dic.keys()) # dict_keys(['id', 'name', 'age', 'ok']) 不用管它是什么.当成list来用就行

          #  返回所有字典的key的集合(高仿列表)

        for key in dic.keys():

        print(key)

        print(dic.values()) # dict_values([123, 'sylar', 18, '科比'])       # 一样. 也当list来用

        for value in dic.values():

        print(value)

        print(dic.items()) # dict_items([('id', 123), ('name', 'sylar'), ('age',18), ('ok', '科比')])        #     这个东西也是list. 只不不过list中装的是tuple

        for key, value in dic.items(): # ?? 这个是解构

        print(key, value)

        

        解构:
        a, b = (1, 2)  =====>  a = 1      b  =  2

        a = (1, 2)    

  • 相关阅读:
    LeetCode 230. 二叉搜索树中第K小的元素(Kth Smallest Element in a BST)
    LeetCode 216. 组合总和 III(Combination Sum III)
    LeetCode 179. 最大数(Largest Number)
    LeetCode 199. 二叉树的右视图(Binary Tree Right Side View)
    LeetCode 114. 二叉树展开为链表(Flatten Binary Tree to Linked List)
    LeetCode 106. 从中序与后序遍历序列构造二叉树(Construct Binary Tree from Inorder and Postorder Traversal)
    指针变量、普通变量、内存和地址的全面对比
    MiZ702学习笔记8——让MiZ702变身PC的方法
    你可能不知道的,定义,声明,初始化
    原创zynq文章整理(MiZ702教程+例程)
  • 原文地址:https://www.cnblogs.com/hfbk/p/9275090.html
Copyright © 2011-2022 走看看