zoukankan      html  css  js  c++  java
  • python数据类型-字典

    本节主要内容:
    1. 字典的简单介绍
    2. 字典增删改查和其他操作
    3. 字典的嵌套

    字典

    字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是唯一的. 在保存的时候, 根据key来计算出一个内存地址. 然后将key-value保存在这个地址中. 这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key'必须是可hash的, 如果你搞不懂什么是可哈希, 暂时可以这样记, 可以改变的都是不可哈希的,那么可哈希就意味着不可变. 这个是为了能准确的计算内存地址而规定的.

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

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

    dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序保存的. 而hash表不是连续的. 所以不能进行切片工作.

    它只能通过key来获取dict中的数据

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

    字典的增加主要有赋值增加.

    dist = {}

    dist["第一个"] = "字典"

    如果第二个赋值的话,key仍然是这个值,那么会做出修改操作.

    如果不想实现修改操作的话,那么需要使用这个方法

    dist.setdefault("第二个")
    dist ={}
    dist.setdefault("第二个")  
    dist.setdefault("第二个","字典")  #这里注意,虽然key是相同的的,但value并不会修改.但是要了解,只有这个方法不会修改,如果是赋值,还是会修改
    print(dist)

    删除

    字典的删除主要有四种方法  dist.pop(),dist.clear(),dist.popitem(),del dist["key"]

    这里面要注意两个,

    一个是pop()删除时,会返回删除的内容.

    另一个popitem()会删除一个随机k,v ,然后返回一个元组.

    示例:

    dic = {"id":123,"name":'sylar',"age":18}
    p = dic.pop("id")   # pop()中需要传入key
    print(p)
    print(dic)
    
    del dic["age"]  #直接del删除某个索引的内容
    
    print(dic)
    
    dic.clear() #清空字典
    print(dic)
    
    dic = {"id":123,"name":'sylar',"age":18}
    dic.popitem() #随机删除一组key和value,返回的是删除的key和value,并且是元组形式
    print(dic)
    

      

    当dist.popitem()返回元组时,可以看一下解构这个概念.

    解构

    a,b = (1,2)

    print(a)  #等于1

    print(b) #等于2

    同样的对于列表和字符串同样生效

    a,b = [1,2]

    print(a)  #等于1

    print(b) #等于2

    这里有个示例:

    k,v = dict.popitem()

    print(k,v)  #打印出随机删除的k,v

    dic.update(dic2) #也就是把dic2字典的内容更新到dic里面,如果key值一样进行修改,没有就是增加.dic2并不会发生变化

    示例:

    dic = {"id":123,"name":'sylar',"age":18}
    dic1 = {"id":5676,"hobby":"girl"}
    dic.update(dic1)
    print(dic)
    

    查的话一般有两种方法一个是通过类似索引key来查询,另一种是通过dic.get("key")来查

    两者的区别就是如果通过索引来查的话,没有会报错.通过dic.get("key")来查如果没有的话会返回None,以及可以设置如果没有返回默认值

    dic.get("key","默认值")

    示例如下:

    dic = {"id":123,"name":'sylar',"age":18}
    p = dic["id"]  #正常的话是可以查出值的.
    print(p)
    
    #w = dic["我"]
    #pirnt(w)  #这样会报错.
    
    #通过这样查就没有这个问题的.并返回的是None
    w = dic.get("")
    print(w)
    #也可以在没找到值的情况下返回默认的值 的
    
    x = dic.get("","hehe")
    print(x)

    其他相关操作

    相关操作包括,dist.keys,dist.values(),dist.items()

    dist.keys()  相当于获取所有的key放在一个列表中,配合解构在循环中调用

    dist.values()  相当于获取所有的value放在一个列表中,配合解构在循环中调用

    dist.items()  相当于获取所有的key/value,最后获取到的是列表,每个key和value是一个元组

    示例:

    dic = {"id":123,"name":'sylar',"age":18}
    
    for w in dic.keys():    #循环打出所有的key
        print(w)
    for w in dic.values():  # 循环打出所有的value
        print(w)
    
    for k,v in dic.items():# 循环打出所有的key和value值
        print(k,v)
    

    二,循环的嵌套

    这个嵌套和之前的列表嵌套很相似,只要按照逻辑一层一层下去就好了.

    示例:

    """
    1,将name对应的列表追加一个元素’wusir’。
    2,将name对应的列表中的alex首字母大写。
    3,oldboy对应的字典加一个键值对’老男孩’,’linux’。
    4,将oldboy对应的字典中的alex对应的列表中的python2删除。
    """
    dic1.get("name").append("wusir")
    print(dic1)
    
    dic1.get("name")[0] = dic1.get("name")[0].capitalize()
    print(dic1)
    
    dic1.get("oldboy")["老男孩"] =  "linux"
    print(dic1)
    dic1.get("oldboy").get("alex").remove("python2")
    print(dic1)
  • 相关阅读:
    java 显示当前的时间
    java RandomAccessFile 向文件中写入数据,怎么样不覆盖原来的数据
    NCARG 6.2.0 安装方法
    【转】在Fedora 9下用IFC安装MM5
    Linux下GrADS的安装
    我的博客园
    nyist 2 括号配对问题
    nyist 100 1的个数
    进制(堆栈)
    进制
  • 原文地址:https://www.cnblogs.com/ahliucong/p/9140281.html
Copyright © 2011-2022 走看看