Создать именованный кортеж из подмножества ключей dict [duplicate]

1

Какой самый питонический способ сделать следующий тестовый проход:

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)

Причина, по которой я хочу это, заключается в том, что я могу выбрать подмножества данных диктата и передать их как неизменные данные.

Теги:
namedtuple

1 ответ

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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню