#
# se for necessario formar um dicionario com chave de type "list",
# poderá proceder da seguinte forma:
#
# - "inventar" um valor distinto para cada lista distinta
# - associar a cada lista o valor correspondente
# - formar o dicionario declarando, em lugar da lista,
# o valor correspondente à chave associada
#
#
# exemplo:
#
# quer-se formar um dicionário com 2 pares "chave com valor":
#
# chave lista [ 1 , 27 , 3 ] com valor 'primeiro'
# chave lista [ 12 , 73 ] com valor 'segundo'
#
#
# a funcao padronizar_literal ( inteiro )
# retorna um literal com 5 algarismos
# que expressa um valor inteiro
#
# padronizar_literal é chamada por uma função
# denominada chave_de ( )
#
def padronizar_literal ( inteiro ) :
limite = 5
algarismo = '0'
literal = str ( inteiro )
extensao = len ( literal )
if ( extensao >= limite ) :
return literal
if ( extensao < limite ) :
for contagem in range ( extensao , limite ) :
literal = algarismo + literal
return literal
# o codigo a seguir exemplifica
# uma associacao entre chave e lista
# implementada por uma funcao denominada chave_de ()
#
# a funcao chave_de ( lista )
# associa uma lista a uma chave
#
# a entrada da função é uma lista
#
# uma lista tem poucos elementos
#
# os elementos de uma lista são inteiros pequenos
#
# a saída da função é um literal
#
def chave_de ( lista ) :
concatenacao = ''
for elemento_de_lista in lista :
literal = str ( elemento_de_lista )
literal = padronizar_literal ( literal )
concatenacao = concatenacao + literal
return concatenacao
#
# ecoar chave de tres listas diferentes
# com elementos inteiros parecidos
#
lista_01 = [ 1 , 27 , 3 ]
chave = chave_de ( lista_01 )
print ( f'chave de { lista_01 } = { chave_de ( lista_01 ) } ' )
print ( )
lista_02 = [ 12 , 73 ]
chave = chave_de ( lista_02 )
print ( f'chave de { lista_02 } = { chave_de ( lista_02 ) } ' )
print ( )
lista_03 = [ 1273 ]
chave = chave_de ( lista_03 )
print ( f'chave de { lista_03 } = { chave_de ( lista_03 ) } ' )
print ( )
#
# formar um dicionario com chaves associadas a duas listas
#
dicionario = { }
chave_01 = chave_de ( lista_01 )
primeiro = 'primeiro'
update_01 = { chave_01 : primeiro }
dicionario .update ( update_01 )
chave_02 = chave_de ( lista_02 )
segundo = 'segundo'
update_02 = { chave_02 : segundo }
dicionario .update ( update_02 )
print ( f'dicionario = { dicionario } ' )
print ( )
#
# podemos testar se o dicionario retorna
# o valor correto correspondente à
# lista_01 e lista_02
#
retorno_01 = dicionario [ chave_de ( lista_01 ) ]
print ( f'dicionario retorna { retorno_01} para chave_de ( { lista_01 } )')
print ()
retorno_02 = dicionario [ chave_de ( lista_02 ) ]
print ( f'dicionario retorna { retorno_02} para chave_de ( { lista_02 } )')
print ()
#
# podemos implementar um dicionário que permite
# recuperar qual lista corresponde a uma chave
# determinada
#
lista_recuperada = {}
chave_01 = chave_de ( lista_01 )
update_01 = { chave_01 : lista_01 }
lista_recuperada .update ( update_01 )
chave_02 = chave_de ( lista_02 )
update_02 = { chave_02 : lista_02 }
lista_recuperada .update ( update_02 )
#
# podemos testar se o lista_recuperada retorna
# a lista correta correspondente
# a chave_de ( lista_01 ) e a chave_de ( lista_02 )
#
retorno_01 = lista_recuperada [ chave_de ( lista_01 ) ]
print ( f'lista_recuperada retorna { retorno_01} para chave_de ( { lista_01 } )')
print ()
retorno_02 = lista_recuperada [ chave_de ( lista_02 ) ]
print ( f'lista_recuperada retorna { retorno_02} para chave_de ( { lista_02 } )')
print ()
a escrita do rastreio da execução do código é:
chave de [1, 27, 3] = 000010002700003
chave de [12, 73] = 0001200073
chave de [1273] = 01273
dicionario = {'000010002700003': 'primeiro', '0001200073': 'segundo'}
dicionario retorna primeiro para chave_de ( [1, 27, 3] )
dicionario retorna segundo para chave_de ( [12, 73] )
lista_recuperada retorna [1, 27, 3] para chave_de ( [1, 27, 3] )
lista_recuperada retorna [12, 73] para chave_de ( [12, 73] )