zoukankan      html  css  js  c++  java
  • 类型与运算三

    一、字典(dict)

    1. 格式

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

      dic{"key":"value","key2":"value2"}

      key:必须是可哈希的(不可变的),并且是唯一的

      value:任意值

      字典是无序的(3.6默认了定义顺序),可变的(可增删改查)

    2. 作用

      2.1 用于存储大量数据,比列表还要大的,但比较消耗内存

      2.2 字典能够将数据与数据进行关联,有明确对应关系时推荐使用字典

      2.3 通过key来查找元素,查询效率高

      2.4 hash算法:key必须时不可变的数据类型

    3. 字典的使用方法

      方法 作用
      1.增
      dic["key"] = "value" 直接用key往里面存数据即可,如果key存在会替换掉原来的value,可用于修改。
      dic.setdefault("key","value") 首先查看要添加的键存不存在,如果不存在,就执行新增;如果存在key,不会执行新增
      2.删
      dic.pop("key") 通过键删除,有返回值,返回的时被删除的值
      del dic["key"] 删除指定键值对
      dic.clear() 清空
      3.改
      dic["key"] = "value" 如果键在字典中存在就修改,不存在就添加
      dic.update(dic2) 将dic2按key添加到dic中,若dic中key存在则替换成dic2中的value,如果key 不存在则直接添加到dic。括号里的字典级别高
      4.查
      dic["key"] 通过键获取值,不能通过值获取键,如果存在key就返回对应的值,如果不存在就报错
      dic.get("key","可制定返回值") 获取,获取值的时候可以指定返回的内容,键不存在的时候不报错
      dic.setdefault("key","value") 首先新增(先看有没有key,如果有就过,如果没有,执行新增),然后根据key把值返回
    4. 相关操作

      4.1 解构

      a = 1
      b = 2
      a,b = b,a
      结果:
      a=2,b=1
      
      a,_,c = "你好啊"  #字符串解构
      print(a,c)
      结果:
      你 啊
      
      a,b = ("1","2")   #元组解构
      print(a,b)
      结果:
      1 2
      
      a,b = ["4","5"]		#列表解构
      print(a,b)
      结果:
      4 5
      
      a,b = {"a":1,"b":2,}		#字典解构
      print(a,b)
      结果:
      a b
      

      4.2 dic.keys() 拿到字典的key

      dic.values() 拿到字典的value

      dic = {"汪峰": "大陆音乐半壁江山", "周杰伦": "亚洲音乐天王", "罗志祥": "亚洲舞王"}#对字典的遍历
      print(dic.keys())   # dict_keys(['汪峰', '周杰伦', '罗志祥']) 像列表但不是列表,可以for循环但不能索引
      for key in dic.keys():
          print(key)  # 拿到key
          print(dic[key]) # 拿到value
      

      4.3 dic.items() 拿到key和value,每一项为一个元组

      dic = {"1":1,"2":2,"3":3,"4":4}
      print(dic.items())
      结果:
      dict_items([('1', 1), ('2', 2), ('3', 3), ('4', 4)])
      
      dic = {"1":1,"2":2,"3":3,"4":4}
      for item in dic.items(): # 当需要遍历字典. 在操作中涉及到key和value的时候.
          print(item) # 元组
          print(item[0],item[1])
      结果:
      ('1', 1)
      1 1
      ('2', 2)
      2 2
      ('3', 3)
      3 3
      ('4', 4)
      4 4
      

      通过key和value解构可写成:

      dic = {"1":1,"2":2,"3":3,"4":4}
      for k, v in dic.items(): #拿到元组类型的键值对,然后进行解构
          print(k,v) 
      结果:
      1 1
      2 2
      3 3
      4 4
      
      dic = {"1":1,"2":2,"3":3,"4":4}
      for i in dic:        # 效率高
          print(i,dic[i])
      

      4.5 效率问题

      import time
      dic = {"1":1,"2":2,"3":3,"4":4}
      s = '3'
      s = time.time()
      if s in  dic.keys():   #列表  --   [1,2,3,4,5]   中查找s 效率高
          pass
      print(time.time() - s)
      
      s1 = time.time()
      for i in dic:
          if s == i:
              pass
      print(time.time() - s1)
      

      4.6 enumerate() 枚举

      dic = {"电脑":15000,"手机":8000,"耳机":4000,"老婆":1111}
      count = 1                 
      for i in dic:
          print(count,i)
          count += 1
      #直接使用enumerate()    
      for i,k in enumerate(dic,1):  # 其中第二个参数默认不写就是0    -- 枚举
          print(i,k)
      结果:
      1 电脑
      2 手机
      3 耳机
      4 老婆
      
    5. 字典的嵌套

      wf = {
          "name": "汪峰",
          "age": 48,
          "成名曲": "春天里",
          "wife": {
              "name": "章子怡",
              "age": 39,
              "工作": "演员"
          },
          "children":[
              {"num": "001", "name": "汪一", "hobby": "唱歌"},
              {"num": "002", "name": "汪二", "hobby": "演戏"} # wf['children'][1]['name']
          ]
      }
      wf['wife']['age'] = wf['wife']['age'] + 10
      print(wf)
      结果:
      {'name': '汪峰', 'age': 48, '成名曲': '春天里', 'wife': {'name': '章子怡', 'age': 49, '工作': '演员'}, 'children': [{'num': '001', 'name': '汪一', 'hobby': '唱歌'}, {'num': '002', 'name': '汪二', 'hobby': '演戏'}]}
      
      
  • 相关阅读:
    【Anagrams】 cpp
    【Count and Say】cpp
    【Roman To Integer】cpp
    【Integer To Roman】cpp
    【Valid Number】cpp
    重构之 实体与引用 逻辑实体 逻辑存在的形式 可引用逻辑实体 不可引用逻辑实体 散弹式修改
    Maven项目聚合 jar包锁定 依赖传递 私服
    Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器
    mysql案例~tcpdump的使用
    tidb架构~本地化安装
  • 原文地址:https://www.cnblogs.com/yaoqi17/p/10999297.html
Copyright © 2011-2022 走看看