zoukankan      html  css  js  c++  java
  • python D5 字典

    # 基本数据类型 :dict
    # 1、字典的基本介绍
    # 字典是python中唯一的一个映射类型,他是以{}括起来的键值对组成,在dict中key是
    # 唯一的。在保存的时候,根据key来计算出一个内存地址,然后将key-value保存在这个地址中。
    # 这种算法成为hash算法,所以,切记,在dict存储的key-value中的key必须是可hash的。
    # (key是可以hash的,可以改变不是可哈希的。)
    # 已知的可哈希(不可变)的数据类型:str(字符串)、int(数字)、tuple(元组)、bool(布尔)
    # 不可哈希的(可变的):list(列表)、dict(字典)、set(集合)
    # 语法:{"key1":"name1","key2":"name2"...}
    # 注意:dict中key值需为可哈希的(不可变),value没有要求、可以保存任意类型的数据
    # dict中数据保存是无需的不连续的,所以不能用切片工作,他只能通过key来获取dict中的数据

    # 二、字典增删改查和其他操作
    # 1、增加:
    # d={"name": "张南北", "age":"16"}
    # d["性别"] = "男"
    # d["name"] = "Daniel" # 如果字典中以有key增加至会覆盖原来的value
    # print(d)

    # d = {"name": "张南北", "age": "16"}
    # d.setdefault("gender")
    # print(d) # {'name': '张南北', 'age': '16', 'gender': None}
    # 用setdefault添加时当只给出key是自动添加空值(None)
    # d.setdefault("gender", "男")
    # print(d)
    # d.setdefault("name", "Jack")
    # print(d) # {'name': '张南北', 'age': '16'}
    # 当使用d.setdefault 添加时dict中原本有相同的key值则不会添加
    # d1 = d.setdefault("name", "Jack")
    # print(d, d1) #{'name': '张南北', 'age': '16'} 张南北
    # d.setdefault("x","y") 增加时如果原dict中有对应的key则print(d.setdefault())为原来dict中key对应的value

    # 2、删除:pop()、popitem()、clear()、del dic[]
    # pop(key):key对应的键值删除,当key值在原字典中找不到则会报错
    # d = {"name": "张南北", "age": "16"}
    # d.pop("name")
    # print(d)
    # d.pop("gender") #KeyError: 'gender'

    # popitem:随机删除字典中一对键值(字典里面的元素排序是无序(最底层的key哈希值随机排列),popitem()删除的是无序的,但在python3.5删除看着是最后一个,只是计算机在中间层做的处理)
    # d = {"name": "张南北", "age": "16", "gender": "men"}
    # d.popitem()
    # print(d)

    # clear:清空字典但字典最底层存储码还在
    # d = {"name": "张南北", "age": "16", "gender": "men"}
    # d.clear()
    # print(d) #{}

    # del d:删除 里面所有都删除(比clear更彻底)
    # del d
    # print(d) # 报错 NameError: name 'd' is not defined
    # del d["name"]
    # print(d)

    # 3、修改
    # d = {"name": "张南北", "age": "16", "gender": "men"}
    # d["age"] = "18"
    # print(d) # 相当于新增(覆盖)
    # d2 = {"hobby": "play_game", "name": "Deniel"}
    # d.update(d2)
    # print(d) # {'name': 'Deniel', 'age': '16', 'gender': 'men', 'hobby': 'play_game'}
    # 把d2中的内容更新到d中. 如果key重名. 则修改替换. 如果不存在key, 则新增.

    # 4、查询:查询一般用key来查找具体的数据
    # 有两种方式查找:d["xxx"]、d.get("xxx")
    # d = {"name": "张南北", "age": "16", "gender": "men"}
    # print(d["name"])
    # print(d["hobby"]) #KeyError: 'hobby'
    # 当用此种方式查找时、字典中没有对应的key则会报错
    # print(d.get("age"))
    # print(d.get("hobby")) # None
    # 此种方法查找当key时,字典中没有回输出None

    # 5、其他操作:
    # keys、values、items
    # keys:找出字典中所有key的值以类似列表的形式保存可以迭代
    # d = {"name": "张南北", "age": "16", "gender": "men"}
    # print(d.keys()) # dict_keys(['name', 'age', 'gender']) 类似列表,但是列表可以迭代
    # for c in d.keys():
    # print(c)
    # values:找出字典中所有value的值以类似列表的形式保存可以迭代
    # items:找出字典中所有的键对
    # print(d.items()) # dict_items([('name', '张南北'), ('age', '16'), ('gender', 'men')])
    # for key, value in d.items():
    # print(key, value)
    # 输出结果:name 张南北
    # age 16
    # gender men
    # for c in d:
    # print(c)
    # 结果:
    # name
    # age
    # gender
    如果直接循环打印字典输出结果只有key


    # 6、元组的解包
    # a, b = 1, 2
    # print(a, b) #1 2
    # 将a,b的值互换
    # b, a = 1, 2
    # print(a, b)

    # 三、字典的嵌套
    # 字典的嵌套 :一层层去找就ok
    # dic1 = {
    # "name": "汪峰",
    # "age": 18,
    # "wife": {
    # "name": '章⼦怡',
    # "age": 28
    # },
    # "children": ['第⼀个⽑孩⼦', '第⼆个⽑孩⼦'],
    # "desc": '峰哥不会告我吧. 没关系. 我想上头条的'
    # }
    # print(dic1["name"]) # 这样查找当嵌套字典中有多个重复的key输出第一层的key对应value值
    # print(dic1.get("wife").get("name")) # 章⼦怡
    # 优选第二种方法
  • 相关阅读:
    .NetCore 3.1和.NetCore 5.0 中WebApi的请求参数的验证方法
    php 使脚本持续的运行
    Elasticsearch es三种分页方式和对比
    es 大批量写入提高性能的策略
    php 使用多进程批量插入数据
    【转】EM算法MATLAB代码及详细注解
    【转】详解EM算法与混合高斯模型(Gaussian mixture model, GMM)
    【转】高斯混合模型
    【转】二维高斯分布(Two-dimensional Gaussian distribution)的参数分析
    word使用dot模板以spring word 模板为例
  • 原文地址:https://www.cnblogs.com/z520h123/p/9837436.html
Copyright © 2011-2022 走看看