zoukankan      html  css  js  c++  java
  • 字典的基本操作

    认识字典:

    用{}表示,每一项内容都是key:value, 每项数据之间用逗号隔开,key值是必须是唯一的,否则只能生效一个,value 可以是任何类型的值(唯一性,无序)

    通过使用hash算法计算key的哈希值,在使用哈希值来存储数据,所以key值必须是不可变类型

            不可变: 字符串, 元组, int, bool

            可变的: list, dict, set

     创建新字典的方法:

    new = dict()

    new2 ={}

    new3 = 字典.fromkeys(可迭代列表,为迭代列表设置的默认值)

    字典的添加和修改

      1.info[键的名称] = 某个值       如果该键的名称在字典中已经存在了,那么就是修改该键的值,如果该键的名称不存在 ,那么就是添加该键到该字典中 

      dic['王者荣耀'] = '鲁班七号' #如果key是不存在的执行的就是添加的操作
      
    dic['王者荣耀']  ='牛魔王'  #如果key已经存在在字典中的话,执行的就是修#改的操作

      2.dic.setdefault() 在setdefault 中先检测是否存在key,如果不存在,就新增,如果就不进行新增的操作,但是两者都会返回这个key的对应的value 值

      3.dic.update(字典b变量)  将字典b的项添加到字典dic中,相当于列表中的extend

    大概作用:如果在更新的时候,两个字典如果含有相同的key,key对应的值就会被更改,如果b中有但是dic中没有,该键值对会直接被添加,如果dic 中有,但是b中没有,那么key对应的值就不变

     

    字典的删除(pop ,popitems,clear,del)

    cc = dic.pop('王者荣耀') #返回的是key对应的值

    dd = dic.popitem()#是随机删除的,返回的是键值对,

     dic.clear()   #直接清空字典

       del dic[key]  eg : del dic[‘王者荣耀’] #直接删除根键是‘王者荣耀’对应的键值对

    字典的查询(dic[key],dic.get(key,’没有’),setdefault(key))

    1. 直接通过使用dic[key] 查询对应的值,存在的问题是,如果给出的key在字典中是不存在的,那么就会报错,
    2. 使用dic.get(key,‘没有找到的的返回值,默认返回None’)作用与上面的一样,只是如果在找不到的时候没有报错,并且可以手动设置没有找到的时候返回的值是什么
    3. setdefault(key) 具体作用与看上面添加的部分

    直接循环字典的时候拿到的就是key

    dic={'射手':'鲁班七号','刺客':'李白','坦克':'项羽'}
    for i in dic:
        print(i)
    常用的字典遍历
    方法1::

    for i in dic:
    print(i,dic[i])
    
    方法2:

    for a,b in dic.items(): print(a,b)
     

    字典的其他功能

    1.根据序列创建字典,并指定统一的值

      fromkeys   创建一个新的字典,其中包含指定的键,但每个键的值是none

    dict.fromkeys([‘name’,’age’],‘这里是修改默认值’) 默认是所有的值都是none如果想要更改的话,通过上面的方式进行修改,如果默认值是一个可迭代的列表,创建后的字典所有的key都是共享一个列表的,对任何的key的value (列表)做了修改,所有的key的值(列表都会同步)

    是创建一新字典与.fromkeys()前面的字典没有任何的关系

    以下的infor或者是info 都是字典的名称

    infor = {‘age’:18,’name’:’panzhenwei’}

    infor.keys() 查看字典的键在对象中通过类似列表的形式显示出来

    infor.values() 查看字典的所有的值,全部列出

    infor.items()   查看键——值,在对象中通过元组的方式显示出来

    字典的copy

    1.通过 等号赋值 的操作此时没有创建新的对象,两个变量指向的是同一个内存地址

    2.通过copy() 或者如列表通过切片的方式进行赋值,这些都是浅的拷贝,只是赋值表面上的东西,(例如:只是复制文本的内容,而没有将文本的文件结构全部复制下来,)例如:如果列表a的某个元素如果还是一个列表b的话,由于copy只是复制表面上的东西,这是复制到的只是另一个列表b的内存地址,如果通过copy复制得到的列表c,对列表c其他不是列表的元素进行修改的话,不会有任何的影响,但是如果这个元素是列表的话,修改之后,列表b也会发生变化,因为他们两个是同一个列表

    如果是使用c = info.copy() 只是浅复制,如果是替换原来的值得话,原字典不会受影响,如果是修改字典里面的值的话,连原来的字典都是会被修改的

    c[‘age’] = 22    这个只是替换,原来的字典没有改变

    c[‘name’].remove (chenweixian) 这样的话,连原来的字典都是会被修改的

       深度复制是把对象内部的所有内容都拷贝一份,例如包括对象的隐含的爸爸的爸爸等东西全部重新拷贝一份也可以说把对象的文件结构也拷贝下来

    通过from copy import deepcopy

    先要进行浅复制c = date.copy()

    d = deepcopy(c)   深度复制

    简单数据库

     a = {panzhenwei:{‘age’:18,’name’:panzhenwei}}

    使用人名作为key 但值的话在嵌套一个字典

  • 相关阅读:
    Scratch编程:打猎(十)
    Scratch编程:漂亮的时钟(九)
    剑指offer总结一:字符、数字重复问题
    剑指offer:数值的整数次方
    剑指offer:二进制中1的个数
    InnoDB存储引擎与MyIsam存储引擎的区别
    数据库查询慢的原因
    剑指offer:矩形覆盖
    剑指offer:跳台阶问题
    redis键的过期和内存淘汰策略
  • 原文地址:https://www.cnblogs.com/vivi0403/p/9836844.html
Copyright © 2011-2022 走看看