【问题标题】:Getting a few values out of dictionary with default different than None (Python)从字典中获取一些默认值不同于 None (Python)
【发布时间】:2013-08-09 21:59:58
【问题描述】:

我不太喜欢这样:Accessing python dict with multiple key lookup string

所以:

In [113]: d = {'a':1, 'b':2}

In [114]: va, vb = map(d.get, ['a', 'b'])

In [115]: va, vb
Out[115]: (1, 2)

但是:

In [116]: va, vb = map(d.get, ['a', 'X'])

In [117]: va, vb
Out[117]: (1, None)

如果需要一个不同于 None 的默认值怎么办?

我可以使用 lambda:

In [118]: va, vb = map(lambda x: d.get(x) or 'MyDefault', ['a', 'c'])

In [119]: va, vb
Out[119]: (1, 'MyDefault')

但是对于编写 2 个 d.get(key, 'MyDefault') 调用来说,这是一种复杂且不经济的权衡。

有什么更好的(没有明显的解决方案,为此编写微不足道的效用函数)?特别是。在 Python 3 中?

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    使用collections.defaultdict:

    >>> from collections import defaultdict
    >>> d = defaultdict(lambda: 'MyDefault', {'a':1, 'b':2})
    >>> d['c']
    'MyDefault'
    >>> map(d.get, ['a', 'c'])
    [1, None]
    >>> map(d.__getitem__, ['a', 'c'])
    [1, 'MyDefault']
    

    【讨论】:

      【解决方案2】:

      稍微短一点:

      In [40]: d = {'a':1, 'b':2}
      
      In [41]: va, vb = [d.get(k, 'MyDefault') for k in ['a', 'X']]
      
      In [42]: va, vb
      Out[42]: (1, 'MyDefault')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-13
        • 2018-07-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多