• Python随笔7


    字典:

    字典是Python中内置的一种可变容器模型,可以把它理解为map,通过key-value的方式存储任意类型的数据数据;创建方式为dir={"key1":value1,"key2":"value2"...}key和value之间用冒号隔开,多个ke、value之间用逗号隔开

    值得注意的是字典中的键是唯一的,值可以不唯一

    dict()方法:

    dict()可以把元组或者列表转换为字典

    s1=[("Name","Tom"),("age",18)]
    print("#将列表转换为字典")
    print(dict(s1))
    print("#将元组转换为字典")
    s2=(["Sex","male"],["Loc","BJ"])
    print(dict(s2))

    结果:

    #将列表转换为字典
    {'Name': 'Tom', 'age': 18}
    #将元组转换为字典
    {'Sex': 'male', 'Loc': 'BJ'}

    字典中的key、value的简单查询、增加、删除(使用字典名[key名])

    d1={"Name":"Tom","Age":20,"Hobby":"Football"}
    #查找字典中已有的key
    print(d1["Name"])
    #向字典中增加key、value
    d1["Loc"]="BJ"
    print(d1)
    #改变字典中的key的value
    d1["Loc"]="SZ"
    print(d1)
    #获取字典中键值对的数量
    print(len(d1))
    #删除字典中的键值对
    del d1["Loc"]
    print(d1)

    结果:

    Tom
    {'Name': 'Tom', 'Age': 20, 'Hobby': 'Football', 'Loc': 'BJ'}
    {'Name': 'Tom', 'Age': 20, 'Hobby': 'Football', 'Loc': 'SZ'}
    4
    {'Name': 'Tom', 'Age': 20, 'Hobby': 'Football'}

    get()方法:

    如果字典中没有某个key,直接使用字典名[key名]的方式查询会报错

    此时可以使用get()方法查看

    d1={"Name":"Tom","Age":20,"Hobby":"Football"}
    print(d1.get("Loc","key or value not defined"))
    print(d1.get("Name"))

    结果:

    key or value not defined
    Tom

    clear()方法:

    清除字典中所有项

    x={}
    y=x
    print(x)
    print(y)
    x["Key"]="Value"
    print(x)
    print(y)
    x.clear()
    print(x)
    print(y)

    结果:

    {}
    {}
    {'Key': 'Value'}
    {'Key': 'Value'}
    {}
    {}

    x、y指向同一块内存地址,当x或者y使用了clear()方法之后,清除了字典中所有的项,那么x、y都为空

    copy()和deepcopy():

    深度复制deepcopy():在内存里面是开辟一块新的内存,放置复制过来的数据,所以原来的对象和复制之后新创建的对象指向的是不同的内存空间,两个对象相互独立,不会相互影响

    浅复制copy():我的理解是只要原对象和复制之后的对象数据指向同一块内存地址,就是浅复制。对于列表来讲,列表list有一个地址,列表里面的元素各自有各自的地址,当我们对列表进行增删改的时候,列表的地址不变,变化的是里面的元素的地址。

    例子:

    这段代码可以看出列表里面的元素无论怎么变化,列表的物理地址不变

    x=[1,2,3,4]
    print(x)
    print(id(x))
    x[0]=5
    print(x)
    print(id(x))
    x.append(6)
    print(x)
    print(id(x))

    结果:

    [1, 2, 3, 4]
    11628672
    [5, 2, 3, 4]
    11628672
    [5, 2, 3, 4, 6]
    11628672

    例子:

    下面的例子中,原字典和复制之后的字典name开始都是指向Tom的,但是无论是x或者y的name一旦发生改变,改变的那个的name就不再指向Tom但是不影响另外一个;hobby都是指向列表,这个列表无论是

    增删改都不会改变列表的物理地址,所以x、y一个改变就会影响到另外一个;字典里新增的key-value也不会影响另外一个字典,因为另一个字典并不会指向这个新增的key-value

    x={"name":"Tom","hobby":["swimming","running"]}
    y=x.copy()
    print(y)
    y["name"]="Jerry"
    print(x)
    print(y)
    print("--------------------------")
    y["hobby"].append("drinking tea")
    print(x)
    print(y)
    print("--------------------------")
    y["hobby"].remove("running")
    print(x)
    print(y)
    print("--------------------------")
    y["loc"]="BJ"
    print(x)
    print(y)

    结果:

    {'name': 'Tom', 'hobby': ['swimming', 'running']}
    {'name': 'Tom', 'hobby': ['swimming', 'running']}
    {'name': 'Jerry', 'hobby': ['swimming', 'running']}
    --------------------------
    {'name': 'Tom', 'hobby': ['swimming', 'running', 'drinking tea']}
    {'name': 'Jerry', 'hobby': ['swimming', 'running', 'drinking tea']}
    --------------------------
    {'name': 'Tom', 'hobby': ['swimming', 'drinking tea']}
    {'name': 'Jerry', 'hobby': ['swimming', 'drinking tea']}
    --------------------------
    {'name': 'Tom', 'hobby': ['swimming', 'drinking tea']}
    {'name': 'Jerry', 'hobby': ['swimming', 'drinking tea'], 'loc': 'BJ'}

     理解了copy(),深度复制就比较简单了

    keys():

    以列表的形式返回字典中的key

    x={
        "Tom":{
            "age":12,
            "loc":"beijing"
        },
        "Jerry":{
            "age":18,
            "loc":"shanghai"
        },
        "Allen":{
            "age":20,
            "loc":"shenzheng"
        }
    }
    print(x.keys())

    结果:

    dict_keys(['Tom', 'Jerry', 'Allen'])

    pop():

    从字典中弹出指定key的项,字典会删除这个项

    x={"Name":"Tom","Age":20,"Loc":"SZ"}
    print(x.pop("Loc"))
    print(x)

    结果:

    SZ
    {'Name': 'Tom', 'Age': 20}

    popitem():

    随机返回并删除字典中的一对键值对,一般是末尾的一对

    x={"Name":"Tom","Age":20,"Loc":"SZ","Hobby":"ball"}
    print(x.popitem())
    print(x)

    结果:

    ('Hobby', 'ball')
    {'Name': 'Tom', 'Age': 20, 'Loc': 'SZ'}

    setdefaults():

    def setdefault(self, k, d=None): # real signature unknown; restored from __doc__
    """ D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D """
    pass
    如果键k在字典D中,那么返回D["k"]对应的值,如果k不是D中的键,则创建一个新的键值对k:d
    例子
    x={"Name":"Tom","Age":20,"Loc":"SZ","Hobby":"ball"}
    print(x.setdefault("Age"))
    x.setdefault("Class","Python")
    print(x)

    结果:

    20
    {'Name': 'Tom', 'Age': 20, 'Loc': 'SZ', 'Hobby': 'ball', 'Class': 'Python'}

    update():

    x.update(y),将字典y添加到x中,x更新,y不变

    x={"Name":"Tom","Age":20,"Loc":"SZ","Hobby":"ball"}
    y={"Class":"Python"}
    x.update(y)
    print(x)
    print(y)

    结果:

    {'Name': 'Tom', 'Age': 20, 'Loc': 'SZ', 'Hobby': 'ball', 'Class': 'Python'}
    {'Class': 'Python'}
  • 相关阅读:
    论JS函数传参时:值传递与引用传递的区别
    关于 rem
    致——自己
    用CSS3写的钟表
    HTML标签marquee实现滚动效果
    手机号截取
    CSS3绘制环形进度条
    限制内容长度(CSS,jQuery)
    移动web开发中遇到的一些问题收纳
    移动平台中 meta 标签的使用
  • 原文地址:https://www.cnblogs.com/bigbigtong/p/9941892.html
Copyright © 2020-2023  润新知