• 关于字典的几个类--defaultdict,OrderedDict, zip()


    一.  1个键对应多个值

    比如:d = {'a' : [1, 2, 3],  'b' : [4, 5]},可以使用 collections 模块中的 defaultdict 来构造这样的字典

    from collections import defaultdict

    #对应的多个值是列表形式 d
    = defaultdict(list) d['a'].append(1) d['a'].append(2) d['b'].append(4)

    #对应的多个值是集合形式
    d
    = defaultdict(set) d['a'].add(1) d['a'].add(2) d['b'].add(4)

    注意:

    1. 选择使用列表还是集合取决于你的实际需求。如果你想保持元素的插入顺序就应该使用列表,如果想去掉重复元素就使用集合(并且不关心元素的顺序问题)

    2. defaultdict的用法和普通字典的用法是一样的,比如多值为集合形式时  d['a']的输出为{1,2}

    二.  字典元素排序,使用OrderedDict

    from collections import OrderedDict
    
    d = OrderedDict()
    d['foo'] = 1
    d['bar'] = 2
    d['spam'] = 3
    d['grok'] = 4
    
    for key in d:
    print(key, d[key])
    
    # Outputs "foo 1", "bar 2", "spam 3", "grok 4"

    注意:一个 OrderedDict 的大小是一个普通字典的两倍,因为它内部维护着另外一个链表。所以如果你要构建一个需要大量 OrderedDict 实例的数据结构的时候 (比如读取 100,000 行 CSV 数据到一个 OrderedDict 列表中去),那么你就得仔细权衡一下是否使用 OrderedDict 带来的好处要大过额外内存消耗的影响

     

    三.  字典中执行计算操作,使用zip()反转键和值

    1. 正常情况下,在字典上的运算只会作用于键,对值是无效的,如下

    >>> prices = { 'AAA' : 40, 'ZZZ': 28, 'BBB': 34 }
    >>> min(prices)
    'AAA'
    >>> max(prices)
    'ZZZ'

    2. 如果想按数值进行排序或者计算,并且结果显示整个键值对。可以用zip()函数,把键值对反转

    >>> fanzhuan = zip(prices.values(), prices.keys())
    >>> min_price = min(fanzhuan)
    >>> print(min_price)
    (28, 'ZZZ')

    注意:zip() 函数创建的是一个只能访问一次的迭代器,每次使用都需要重新调用此函数。

    3.  使用zip()函数时,如果多个实体拥有相同的值的时候,键会决定返回结果

    >>> prices = { 'AAA' : 45.23, 'ZZZ': 45.23 }
    >>> min(zip(prices.values(), prices.keys()))
    (45.23, 'AAA')
    >>> max(zip(prices.values(), prices.keys()))
    (45.23, 'ZZZ')

    四. 查找两个字典中的相同点,比如相同的键名或者值

    例如:a = {'x' : 1, 'y' : 2, 'z' : 3}          b = {'w' : 10, 'x' : 11, 'y' : 2},现在查找这两个字典中的相同处,可以在两字典的 keys() 或者 items() 方法返回结果上执行集合操作

    # 两个字典公有的键
    >>> a.keys() & b.keys()
    {'y', 'x'}
    
    #只在a字典中存在的键
    >>> a.keys() - b.keys()
    {'z'}
    
    #两个字典中共有的键值对
    >>> a.items() & b.items()
    {('y', 2)}

    这些操作也可以用于修改或者过滤字典元素,比如下面使用列表推导式

    >>> c = {key:a[key] for key in a.keys() - {'z'}}
    >>> c
    {'y': 2, 'x': 1}
  • 相关阅读:
    淘宝IP地址库采集
    Android MediaCodec硬编兼容性测试方案
    《Tensorflow实战》之6.3VGGnet学习
    tensorflow问题集锦
    <tensorflow实战>之5.3实现进阶的卷积网咯
    CNN_minist
    tensorflow之MLP学习
    tensorflow学习之等价代码
    tensorflow学习之softmax regression
    NPE进一步学习
  • 原文地址:https://www.cnblogs.com/regit/p/9372795.html
Copyright © 2020-2023  润新知