zoukankan      html  css  js  c++  java
  • python基础【第七篇】

    字典

    列表可以存储大量的数据类型,但是只能按照顺序存储,数据与数据之间关联性不强。

    所以咱们需要引入一种容器型的数据类型,解决上面的问题,这就需要dict字典。

    字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成.

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

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

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

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

    语法:{'key1':1,'key2':2}
    

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

    1.为什么要学习字典

    1. 存储数据比较大
    2. 字典的查找速度比列表快
    3. 方便查找

    2.基本格式

    dic = {"键":"值"}
    键是唯一的
    不可变数据类型才能作为字典的键
    字典是无序的,可变的
    # 例如
    dic = {"123":1,2:"alex",False:[12,34],(1,2):"wusir"}
    

    3.字典的基本操作

    # 增
    dic[3] = "233"
    dic.setdefault(键,默认值)
    print(dic.setdefault(键,默认值)) #打印出来的是值
    # 删
    dic.pop(键)
    dic.clear() # 清空字典
    del dic[键]  #删除该键值对
    # 改
    dic[键]=值
    dic.update()
    # 查
    dic["键"]
    dic.get("键","找不到时返回设定的默认值")
    # 其他操作
    
    dic.keys()  # 取出字典中所有的键
    dic.values() # 取出字典中的所有的值
    dic.items() # 取出字典中的键值对,并以元组的形式存在列表中
    
    #键值分离
    for k,v in dic.items:
        pring(k,v)
    
    #字典支持嵌套使用
    # 解构
    a, b =[10, 20]
    
    

    面试题:

    a = [1,2,3]
    b = (3,2,1)
    # 用一行代码将数值转换
    a,b = b,a
    print(a,b)
    

    简单测试题

    # 利用所学知识,将id前3位与字典中相对应的地区进行匹配,得出id中各属地出现的次数
    # 得出结果形如:{"河南":3,"河北":2,"北京":1,"内蒙":1}
    id = [120121198903119561,
          120121198903110561,
          120121196903119561,
          130482198307144762,
          130482198307144662,
          110121197805144347,
          150121197502122799]
    
    addrs = {
    120: "河南",
    130: "河北",
    110: "北京",
    150: "内蒙",
    }
    # 方式一
    dic = {}
    for i in id:
          addrs_key = int(str(i)[0:3])
          dic_key = addrs[addrs_key]
          if dic.get(dic_key):
                dic[dic_key] +=1
          else:
                dic[dic_key] = 1
    print(dic)
    
    # 方式二
    dic1 = {}
    for i in id:
        a = int(str(i)[0:3])
        if dic1.get(addrs[a]):
            dic1[addrs[a]] += 1
        else:
            dic1.setdefault(addrs[a], 1)
    print(dic1)
    
    # 方式三
    dic1 = {}
    for i in id:
        dic1[addrs[int(str(i)[0:3])]] = dic1.get(addrs[int(str(i)[0:3])], 0) + 1
    print(dic1)
    

    # 将字符串s转变为形如{'key1': '1', 'key2': '2', 'key3': '3'}的字典
    s = "key:1-key:2-key:3"
    ls = s.split("-")
    dic = {}
    for i in ls:
          k,v= (i.split(":"))
          dic[k+f"{v}"]=v
    print(dic)
    

    测验

    1. 用你能想到的最少的代码生成一个包含100个key的字典,每个value的值不能一样

    2. {‘k0’: 0, ‘k1’: 1, ‘k2’: 2, ‘k3’: 3, ‘k4’: 4, ‘k5’: 5, ‘k6’: 6, ‘k7’: 7, ‘k8’: 8, ‘k9’: 9} 请把这个dict中key大于5的值value打印出来。

    3. 把题2中value是偶数的统一改成-1

    4. 请设计一个dict, 存储你们公司每个人的信息, 信息包含至少姓名、年龄、电话、职位、工资,并提供一个简单的查找接口,用户按你的要求输入要查找的人,你的程序把查到的信息打印出来

      # 下面解答仅个人观点
      # 1
      key = {}
      for i in range(100):
          key.setdefault(i,f"我是{i}")
      print(key)
      
      # 2 and 3
      dic = {'k0': 0, 'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6, 'k7': 7, 'k8': 8, 'k9': 9}
      for k,v in dic.items():
          if v > 5:
              print(dic[k])
      for k,v in dic.items():
          if v % 2 == 0:
              dic[k] = -1
      print(dic)
      
      # 4
      dic = {"小明":[18,199,"销售",8000],
              "小白":[20,110,"安全",9000]}
      user_input = input("请输入你要查找的人的名字:")
      for k in dic:
          if k == user_input:
              print(f"小明的年龄是{dic[k][0]},电话是{dic[k][1]},职业是{dic[k][2]},工资是{dic[k][3]}")
              break
          else:
              print("查无此人")
              break
      
      
  • 相关阅读:
    Vijos Oct.28 NOIP2012模拟赛
    QBXT day3 圆盘自动机 游戏 方块
    QBXT day2 最近点对 最长路径 山峰
    1609: [Usaco2008 Feb]Eating Together麻烦的聚餐
    1617: [Usaco2008 Mar]River Crossing渡河问题
    委托的Lambda表达式
    值转换器IValueConverter
    Silverlight中遇到的一些问题
    匿名方法
    Silverlight中的Binding
  • 原文地址:https://www.cnblogs.com/tianming66/p/11722146.html
Copyright © 2011-2022 走看看