Namedtuple em Python
Python suporta um tipo de dicionário contêiner chamado ' nomeadatupla() 'presente no módulo' coleções '. Neste artigo veremos como criar um NameTuple e operações em NamedTuple.
O que é NamedTuple em Python?
Em Pitão NamedTuple está presente dentro do módulo de coleções . Ele fornece uma maneira de criar estruturas de dados simples e leves, semelhantes a uma classe, mas sem a sobrecarga de definir uma classe completa. Assim como os dicionários, eles contêm chaves com hash para um valor específico. Pelo contrário, suporta acesso por valor-chave e iteração da funcionalidade que dicionários falta.
Sintaxe NamedTuple do Python
nomeadotuple(nome do tipo campos_nomes)
- typename - O nome da tupla nomeada.
- field_names - A lista de atributos armazenados no nomeadotuple.
Exemplo: A implementação de código de NamedTuple é mostrada em Pitão .
Python # Python code to demonstrate namedtuple() from collections import namedtuple # Declaring namedtuple() Student = namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # Access using index print ( 'The Student age using index is : ' end = '' ) print ( S [ 1 ]) # Access using name print ( 'The Student name using keyname is : ' end = '' ) print ( S . name )
Saída
The Student age using index is : 19 The Student name using keyname is : Nandini
Operações em NamedTuple
Abaixo estão as seguintes operações que podem ser feitas usando NamedTuple():
- Crie um NameTuple
- Operações de acesso
- Operações de conversão
- Operações Adicionais
Crie um NameTuple em Python
Isso cria uma nova classenamedtuple usando a funçãonamedtuple() do coleções módulo. O primeiro argumento é o nome da nova classe e o segundo argumento é uma lista de nomes de campos.
Python from collections import namedtuple Point = namedtuple ( 'Point' [ 'x' 'y' ]) p = Point ( x = 1 y = 2 ) print ( p . x p . y )
Saída
1 2
Operações de acesso
Namedtuples em Python fornecem maneiras convenientes de acessar seus campos. Abaixo estão algumas operações de acesso fornecidas em Python para NamedTuple:
- Acesso por índice
- Acesso por nome-chave
- Acesso usando getattr()
Acesso por índice
Os valores dos atributos de nomeadotuple() são ordenados e podem ser acessados usando o número do índice, diferentemente dos dicionários que não são acessíveis por índice. Neste exemplo estamos acessando o arquivo do aluno usando index.
Python # importing 'collections' for namedtuple() import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # Access using index print ( 'The Student age using index is : ' end = '' ) print ( S [ 1 ])
Saída
The Student age using index is : 19
Acesso por nome-chave
O acesso por nome-chave também é permitido como nos dicionários. Neste exemplo estamos usando keyname para acessar o nome do aluno.
Python # importing 'collections' for namedtuple() import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # Access using name print ( 'The Student name using keyname is : ' end = '' ) print ( S . name )
Saída
The Student name using keyname is : Nandini
Acesso usando getattr()
Esta é mais uma maneira de acessar o valor, fornecendo o valor nomeado e a chave como argumento. Neste exemplo, estamos usando getattr() para acessar o id do aluno no nomeadotuple fornecido.
Python # importing 'collections' for namedtuple() import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # Access using getattr() print ( 'The Student DOB using getattr() is : ' end = '' ) print ( getattr ( S 'DOB' ))
Saída
The Student DOB using getattr() is : 2541997
Operações de conversão
Namedtuples fornecem algumas operações de conversão úteis para trabalhar com outros tipos de dados em Pitão . Abaixo estão as seguintes operações de conversão fornecidas para tuplas nomeadas em Python:
- Usando _make()
- Usando _asdict()
- Usando o operador ** (estrela dupla)
Conversão usando _make()
Esta função é usada para retornar um nomeadotuple() do iterável passado como argumento. Neste exemplo estamos usando _make() para converter a lista 'li' em NamedTuple.
Python # importing 'collections' for namedtuple() import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # initializing iterable li = [ 'Manjeet' '19' '411997' ] di = { 'name' : 'Nikhil' 'age' : 19 'DOB' : '1391997' } # using _make() to return namedtuple() print ( 'The namedtuple instance using iterable is : ' ) print ( Student . _make ( li ))
Saída
The namedtuple instance using iterable is : Student(name='Manjeet' age='19' DOB='411997')
Operação de conversão usando _asdict()
Esta função retorna o OrdenadoDict() conforme construído a partir dos valores mapeados de nomeadotuple(). Neste exemplo, estamos usando _asdict() para converter a lista de entrada em uma instâncianamedtuple.
Python import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # initializing iterable li = [ 'Manjeet' '19' '411997' ] # initializing dict di = { 'name' : 'Nikhil' 'age' : 19 'DOB' : '1391997' } # using _asdict() to return an OrderedDict() print ( 'The OrderedDict instance using namedtuple is : ' ) print ( S . _asdict ())
Saída
The OrderedDict instance using namedtuple is : OrderedDict([('name' 'Nandini') ('age' '19') ('DOB' '2541997')]) Usando o operador '**' (estrela dupla)
Esta função é usada para converter um dicionário em Nametuple(). Neste exemplo, estamos usando '**' para converter a lista de entrada em NamedTuple.
Python import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # initializing iterable li = [ 'Manjeet' '19' '411997' ] # initializing dict di = { 'name' : 'Nikhil' 'age' : 19 'DOB' : '1391997' } # using ** operator to return namedtuple from dictionary print ( 'The namedtuple instance from dict is : ' ) print ( Student ( ** di ))
Saída
The namedtuple instance from dict is : Student(name='Nikhil' age=19 DOB='1391997')
Operações Adicionais
Existem algumas operações adicionais que são fornecidas em Pitão para NamedTuples:
- _campos
- _substituir()
- __novo__()
- __getnewargs__()
_campos
Este atributo de dados é usado para obter todos os nomes-chave do namespace declarado. Neste exemplo estamos usando _fields para obter todos os nomes-chave do namespace declarado.
Python import collections Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # using _fields to display all the keynames of namedtuple() print ( 'All the fields of students are : ' ) print ( S . _fields )
Saída
All the fields of students are : ('name' 'age' 'DOB') _substituir()
_replace() é como str.replace() mas tem como alvo campos nomeados (não modifica os valores originais). Neste exemplo estamos usando _replace() para substituir um nome de 'Nandini' por 'Manjeet'.
Python import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # ._replace returns a new namedtuple # it does not modify the original print ( 'returns a new namedtuple : ' ) print ( S . _replace ( name = 'Manjeet' ))
Saída
returns a new namedtuple : Student(name='Manjeet' age='19' DOB='2541997')
__novo__()
Esta função retorna uma nova instância da classe Student tomando os valores que queremos atribuir às chaves na tupla nomeada. Neste exemplo estamos usando __new__() para retornar uma nova instância da classe Student.
Python import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # Student.__new__ returns a new instance of Student(nameageDOB) print ( Student . __new__ ( Student 'Himesh' '19' '26082003' ))
Saída
Student(name='Himesh' age='19' DOB='26082003')
__getnewargs__()
Esta função retorna a tupla nomeada como uma tupla simples. Neste exemplo estamos fazendo o mesmo usando __getnewargs__().
Python import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) H = Student ( 'Himesh' '19' '26082003' ) # .__getnewargs__ returns the named tuple as a plain tuple print ( H . __getnewargs__ ())
Saída
('Himesh' '19' '26082003')
- Mutabilidade : As instâncias de uma classe podem ser mutáveis ou imutáveis enquanto
namedtupleas instâncias são imutáveis.- Métodos : As classes podem conter métodos (funções) enquanto
namedtuplefornece principalmente uma maneira de armazenar dados com campos nomeados.- Herança : As classes suportam herança permitindo a criação de hierarquias complexas enquanto
namedtuplenão suporta herança.
Qual é a diferença entre dict digitado e nomeadotuple?
- Verificação de tipo :
TypedDict(dotypingmódulo) fornece dicas de tipo para dicionários com pares de valores-chave específicos, úteis para verificação de tipo.namedtuplenão fornece dicas de tipo.- Mutabilidade :
TypedDictinstâncias são mutáveis, permitindo alterações nos valores enquantonamedtupleas instâncias são imutáveis.- Estrutura :
TypedDicté usado para definir a estrutura de dicionários com tipos específicos para cada chave enquantonamedtuplefornece campos nomeados para dados semelhantes a tuplas.