代码之家  ›  专栏  ›  技术社区  ›  user3139545

从dict键的子集创建命名元组[重复]

  •  1
  • user3139545  · 技术社区  · 6 年前

    通过以下测试最要紧的方法是什么?

    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 回复  |  直到 6 年前
        1
  •  1
  •   PieCot    6 年前

    您可以简单地使用属性 _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)