从dict键的子集创建命名元组

时间:2018-06-17 17:45:12

标签: python namedtuple

进行以下测试通过的最pythonic方法是什么:

def test_named_tuple_from_map():
    from collections import namedtuple
    NT = namedtuple('nt', ['a', 'b', 'c'])
    source = {'a': 1, 'b': 2, 'd': 4, 'c': 3}
    new = NT(**source)
    assert new == NT(a=1,b=2,c=3)

我想要这个的原因是我可以选择dict数据的子集并作为不可变数据传递。

1 个答案:

答案 0 :(得分:1)

您只需使用_fields的属性namedtuple并相应地过滤字典:

def test_named_tuple_from_map():
    from collections import namedtuple
    NT = namedtuple('nt', ['a', 'b', 'c'])
    source = {'a': 1, 'b': 2, 'd': 4, 'c': 3}

    new = NT(**{k: v for k, v in source.items() if k in NT._fields})

    assert new == NT(a=1, b=2, c=3)