开发者

Python映射类型之dict详解

目录
  • 映射类型—dict
    • list(d)
    • len(d)
    • d[key]
    • d[key]=value
    • deld[key]
    • keyind
    • iter(d)
    • clear()
    • copy()
    • classmethodfromkeys(iterable[,value])fromkeys()
    • get(key[,default])
    • items()
    • keys()
    • pop(key[,default])
    • popitem()
    • reversed(d)
    • setdefault(key[,default])
    • update([other])
    • values()
    • d|other
    • d|=other
  • 总结

    映射类型 — dict

    字典可用多种方式来创建:

    • 使用花括号内以逗号分隔键: 值对的方式: {‘jack’: 4098, ‘sjoerd&rshttp://www.cppcns.comquo;: 4127} or {4098:‘jack’, 4127: ‘sjoerd’}
    • 使用字典推导式: {}, {x: x ** 2 for x in range(10)}
    dict_a = {key: value for k编程客栈ey in 'python' for value in range(2)}
    list_phone = [('HUAWEI', '华为'), ('MI', '小米'), ('OPPO', 'OPPO'), ('VIVO', 'VIVO')]
    dict_c = {key: value for key, value in list_phone}
    
    • 使用类型构造器: dict(), dict([(‘foo’, 100), (‘bar’, 200)]), dict(foo=100,bar=200)

    字典所支持的操作:

    list(d)

    返回字典d 中使用的所有键的列表

    len(d)

    返回字典d 中的项数

    d[key]

    返回d 中以key 为键的项。如果映射中不存在key 则会引发KeyError。

    如果字典的子类定义了方法__missing__() 并且key 不存在,则d[key] 操作将调用该方法并附带键key 作为参数。d[key] 随后将返回或引发__missing__(key) 调用所返回或引发的任何对象或异常。没有其他操作或方法会发起调用__missing__()。如果未定义__missing__(),则会引发KeyError。missing() 必须是一个方法;它不能是一个实例变量:

    >>> class Counter(dict):
    ... def __missing__(self, key):
    ... return 0
    >>> c = Counter()
    >>> c['red']
    0
    >>> c['red'] += 1
    >>> c['red']
    1
    

    上面的例子显示了collections.Counter 实现的部分代码。还有另一个不同的__missing__方法是由collections.defaultdict 所使用的。

    d[key] = value

    将d[key]设为value。

    del d[key]

    将d[key] 从d中移除。如果映射中不存在key 则会引发KeyError。

    key in d

    如果d中存在键key 则返回True,否则返回False。

    iter(d)

    返回以字典的键为元素的迭代器。这是iter(d.keys()) 的快捷方式。

    clear()

    移除字典中的所有元素。

    copy()

    返回原字典的浅拷贝

    深copy

    若你想彻底使2个dict完全独立,无论有多少层数据。那就要用python工具包里的一个工具了

    import copy
    data = {
        "name":"alexhttp://www.cppcns.com",
        "age":18,
        "scores":{
            "语文":130,
            "数学":60,
            "英语":98,
        }
    }
    d2 = data.copy()
    d3 =copy.deepcopy(data)
    d3["scores"]["语文"] = 149
    print(d3)
    print(data)
    

    classmethod fromkeys(iterable[, value ]) fromkeys()

    函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值

    seq = ('Google', 'Runoob', 'Taobao')
    thisdict = dict.fromkeys(seq)
    print "新字典为 : %s" %  str(dict)
    thisdict = dict.fromkeys(seq, 10)
    print "新字典为 : %s" %  str(thisdict)
    """
    新的字典为 : {'age': None, 'name': None, 'sex': None}
    新的字典为 : {'age': 10, 'name': 10, 'sex': 10}
    """
    

    get(key[, default ])

    如果key 存在于字典中则返回key 的值,否则返回default。如果default 未给出则默认为None,因而此方法绝不会引发KeyError。

    items()

    • 以列表返回视图对象,是一个可遍历的key/value对
    • dict.keys()dict.values()dict.items() 返回的都是视图对象( view objects),提供了字典实体的动态视图,这就意味着字典改变,视图也会跟着变化
    tinydict = {'Name': 'Runoob', 'Age': 7}
    print ("Value : %s" %  tinydict.items()) # Value : dict_items([('Age', 7), ('Name', 'Runoob')])
    

    keys()

    返回由字典键组成的一个新视图

    dict.keys()dict.values() dict.items() 返回的都是视图对象( view objects),提供了字典实体的动态视图,这就意味着字典改变,视图也会跟着变化

    a = {"a": 3, "b": 2}
    print(a.keys()) # <class 'dict_keys'>
    

    pop(key[, default ])

    删除字典给定键 key 所对应的值,返回值为被删除的值。

    site= {'name': '菜鸟教程', 'alexa': 10000, 'url': 'www.runoob.com'}
    element = site.pop('name')
    print('删除的元素为:', element)
    print('字典为:', site)
    """
    删除的元素为: 菜鸟教程
    字典为: {'alexa': 100编程客栈00, 'url': 'www.runoob.com'}
    """
    

    popitem()

    • popitem() 方法随机返回并删除字典中的最后一对键和值。
    • 如果字典已经为空,却调用了此方法,就报出KeyError异常。
    • 返回一个键值对(key,value)形式,按照 LIFO(Last In First Out后进先出法)顺序规则,即最末尾的键值对。
    site= {'name': '菜鸟教程', 'alexa': 10000, 'url': 'www.runoob.com'}
    pop_obj=site.popitem()
    print(pop_obj)  
    print(site)
    

    reversed(d)

    返回一个逆序获取字典键的迭代器。这是reversed(d.keys()) 的快捷方式

    setdefault(key[, default ])

    setdefault() 方法和 get()方法 类似, 如果键不存在于字典中,将会添加键并将值设为默认值。

    tinydict = {'Name': 'Runoob', 'Age': 7}
    print ("Age 键的值为 : %s" %  tinydict.setdefault('Age', None))
    print ("Sex 键的值为 : %s" %  tinydict.setdefault('Sex', None))
    print ("新字典为:", tinydict)
    

    update([other ])

    update() 函数把字典参数 dict2 的 key/value(键/值) 对更新到字典 dichttp://www.cppcns.comt 里

    tinydict = {'Name': 'Runoob', 'Age': 7}
    tinydict2 = {'Sex': 'female' }
    tinydict.update(tinydict2)
    print ("更新字典 tinydict : ", tinydict)
    

    values()

    返回一个视图对象,dict.keys()、dict.values() 和 dict.items() 返回的都是视图对象( view objects),提供了字典实体的动态视图,这就意味着字典改变,视图也会跟着变化

    a = {"a": 3, "b": 2}
    print(a.values()) # dict_values([3, 2])
    

    d | other

    合并d 和other 中的键和值来创建一个新的字典,两者必须都是字典。当d 和other 有相同键时,other 的值优先。3.9才支持

    a = {"apple": 3, "banana": 4}b = {"grape": 5, "banana": 8}print(a | b)

    d |= other

    • 用other 的键和值更新字典d ,other 可以是mapping 或iterable 的键值对。当d 和other 有相同键时,other 的值优先。
    • 3.9 新版功能
    a = {"one": 1, "two": 2, "three": 3}
    a |= {"three": 30, "four": 4, "five": 5}
    print(a)
    a = {"apple": 3, "banana": 4}
    b = {"grape": 5, "banana": 8}
    a |= b
    print(a)
    """
    {'one': 1, 'two': 2, 'three': 30, 'four': 4, 'five': 5}
    {'apple': 3, 'banana': 8, 'grape': 5}
    """
    

    总结

    本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容! 

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜