zoukankan      html  css  js  c++  java
  • 字典

    所有的编程语言都有字典这种数据类型,用法都一样.Python和Golang中叫字典,其他语言中有的叫哈希,映射,map等等,都是一个概念.
    描述一个物体相关信息,一对(key,value的形式)
    数据类型不一样,意思也不一样,不同类型,但是这些数据联合在一起都表示同一个物体的信息.
    值可以是任何数据类型,键只能使用字符串.数字或元组,通常键只用字符串表示(为了和其他语言保持一致)
    键必须是唯一的
    没有真正的索引,所以是无序的,打印输出会出现顺序不一致的情况.

    作用:描述一个物体的信息,类型可以不同
    格式:{key1:value1,key2:value2...}
    字典[key]
    key唯一

    dict1 = {"name": "zhangshan", "age": 18, "boy": True, "name": "456"}  # 如果key重复了,value会取最后的那个key对应的value
    # 字典的元素总数等于 ,号的个数 + 1
    print(dict1["name"])  # 获取指定key对应的value
    print(type(dict1))
    print(dict1)
    dict1["name"] = "op"  # 修改指定key对应的value
    print(dict1)
    dict1["height"] = 1.75  # 如果key存在就是修改,key不存在就是增加键值对
    print(dict1)

    1.增加元素:

    dict1 = {"name": "zhang", "age": 15,'gender':'male'}
    dict1["height"] = 1.7  # key不存在就是增加,存在就是修改

    2.删除元素:

    dict1 = {"name": "zhang", "age": 15,'gender':'male'}
    del dict1["gender"]  # 删除指定key对应的键值对,无返回值
    name = dict1.pop("name")  # 删除指定key对应的键值对,并且把删除的value返回,pop()本来是删除最后一个,但是因为字典是无序的,所以必须指定key,否则会报错

    3.清空元素:

    dict1 = {"name": "zhang", "age": 15, 'gender': 'male'}
    dict1.clear()  # 清空

    4.修改元素:

    dict1 = {"name": "zhang", "age": 15,'gender':'male'}
    dict1["name"] = "74"  # 修改key对应的value
    
    dict1.setdefault("name1", "lisi")  # 如果key存在,什么也不做,key不存在就增加键值对
    
    dict2 = {'height': 175, "boy": True, "name": "liskk"}
    # key存在就是修改(因为key如果存在的话新添加的key对应的value会覆盖掉原来的value),不存在就增加键值对
    dict1.update(dict2)

    5.查询元素:

    # 查询的方法均有返回值
    dict1 = {"name": "zhang", "age": 15,'gender':'male'}
    name = dict1["name"]  # 获取指定key的value,如果获取的key不存在,报错
    name = dict1.get("name1")  # 获取指定key的value,如果获取的key不存在,不会报错,返回None

    6.获取所有key:

    dict1 = {"name": "zhang", "age": 15,'gender':'male'}
    keys = dict1.keys()  # 获取字典中所有的键
    for key in keys:
        print(key)
    print(keys)  # 输出的是:dict_keys(['name', 'age'])

    7.获取所有的value:

    dict1 = {"name": "zhang", "age": 15,'gender':'male'}
    values = dict1.values()  # 获取出字典中所有的值,返回的也是视图对象
    for value in values:
        print(value)
    print(values)

    8.获取key-value键值对:

    dict1 = {"name": "zhang", "age": 15,'gender':'male'}
    items = dict1.items()  # 获取出所有的键值对,视图对象,里面是一个元组类型,且元组的个数是固定的,所以可以使用解包
    print(items)
    for item in items:
        print(item)
    
    for key,value in dict1.items():  # 解包
        print(key)
        print(value)
    
    for ele in dict1:  # 遍历字典默认取到的是key,这种最好用,最常用
        print(dict1[ele])  # 通过key来取到value
    import sys
    it = dict1.keys()  # 获取所有key
    print(sys.getsizeof(it))  # 占用少,叫视图对象
    
    it1 = list(it)
    print(sys.getsizeof(it1))  # 占用的内存字节多
    
    values = dict1.values()  # 所有值
    print(values)  # dict_values(['zang', 15])
    
    items = dict1.items()  # 所有key-value键值对
    print(items)  # dict_items([('name', 'zang'), ('age', 15)])
    print(type(items))  # <class 'dict_items'>
    for key, value in dict1.items():
        print(key)
        print(value)
    for ele in dict1:  # 遍历默认是key
        print(dict1)
        print(dict1[ele])

    9.视图对象:

    视图对象/可视对象:dict_keys(['name', 'age']),减少内存的占用.

    支持的操作:

      1.查看内部结构

      2.支持for循环遍历

      3.支持if in语句

      4.没有增.删.改(类似元组)

      5.可以把它转换成高级变量类型

    Python2中 字典.keys(),字典.values()和 字典.items() 获取到的都是列表类型,Python3修改成了视图对象(也是可迭代对象),目的是为了减少内存的占用.数据类型变了,更加省内存空间了.(版本升级肯定是越来越好,不能变差了)

  • 相关阅读:
    分布式与云计算有什么区别?
    多线程学习笔记
    docker解决报错WARNING: IPv4 forwarding is disabled. Networking will not work.
    Docker问题解决:Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io: no such host
    docker学习笔记
    linux命令学习
    Xftp5提示要继续使用此程序,您必须应用最新的更新的解决方案
    Springboot学习笔记
    maven学习笔记
    Spring学习笔记(6)
  • 原文地址:https://www.cnblogs.com/huaibin/p/12095658.html
Copyright © 2011-2022 走看看