Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como exibir o dict quando o valor for uma lista?

Estou realizando um exercício onde os valores de um dicionário é uma lista com um conjunto de nomes:

rios = dict(nilo = ['Sudão', 'Sudão do Sul', 'Etiópia', 'Egito', 'Uganda', 'Tanzânia', 'Quênia', 'Ruanda', 'Burundi', 'Eritreia', 'República Democrática do Congo'],
            amazonas = ['Brasil', 'Peru', 'Colômbia', 'Venezuela', 'Equador', 'Bolívia', 'Guiana'],
            amur = ['Rússia', 'China', 'Mongólia'])

Eu gostaria de exibir uma frase elegante com o nome do rio e os países no qual esse rio passa, pra isso fiz um laço for:

for key, value in rios.items():
  print('O rio {} percorre os países: {}'.format(key, value))

No entanto, a resposta que obtive foi o valor de lista e não o valor de cada um dos itens da lista em separado:

O rio nilo percorre os países: ['Sudão', 'Sudão do Sul', 'Etiópia', 'Egito', 'Uganda', 'Tanzânia', 'Quênia', 'Ruanda', 'Burundi', 'Eritreia', 'República Democrática do Congo']
O rio amazonas percorre os países: ['Brasil', 'Peru', 'Colômbia', 'Venezuela', 'Equador', 'Bolívia', 'Guiana']
O rio amur percorre os países: ['Rússia', 'China', 'Mongólia']

Como eu poderia fazer pra obter uma frase com os valores da lista em separado, tipo:

O rio nilo percorre os países: Sudão, Sudão do Sul, Etiópia, Egito, Uganda, Tanzânia, Quênia, Ruanda, Burundi, Eritreia, República Democrática do Congo
O rio amazonas percorre os países: Brasil, Peru, Colômbia, Venezuela, Equador, Bolívia, Guiana
O rio amur percorre os países: Rússia, China, Mongólia

Fazer outro laço for para os valores funciona? Como poderia ficar esse código?

2 respostas

Consegui resolver com uma leve gambiarra:

rios = dict(nilo = ['Sudão', 'Sudão do Sul', 'Etiópia', 'Egito', 'Uganda', 'Tanzânia', 'Quênia', 'Ruanda', 'Burundi', 'Eritreia', 'República Democrática do Congo'],
            amazonas = ['Brasil', 'Peru', 'Colômbia', 'Venezuela', 'Equador', 'Bolívia', 'Guiana'],
            amur = ['Rússia', 'China', 'Mongólia'])

for key, value in rios.items():
  print('O rio {} percorre os países: '.format(key))
  for value in value:
    print(value)
  print('\n')

O problema que ele exibe os valores um abaixo do outro.

O rio nilo percorre os países: 
Sudão
Sudão do Sul
Etiópia
Egito
Uganda
Tanzânia
Quênia
Ruanda
Burundi
Eritreia
República Democrática do Congo


O rio amazonas percorre os países: 
Brasil
Peru
Colômbia
Venezuela
Equador
Bolívia
Guiana


O rio amur percorre os países: 
Rússia
China
Mongólia

Queria saber se há alguma forma mais elegante de exibição, tipo:

O rio nilo percorre os países: Sudão, Sudão do Sul, Etiópia, Egito, Uganda, Tanzânia, Quênia, Ruanda, Burundi, Eritreia, República Democrática do Congo
O rio amazonas percorre os países: Brasil, Peru, Colômbia, Venezuela, Equador, Bolívia, Guiana
O rio amur percorre os países: Rússia, China, Mongólia
solução!

Boa noite Anderson, tudo bem?

Adaptando pouco seu código conseguimos o resultado esperado.

rios = dict(nilo = ['Sudão', 'Sudão do Sul', 'Etiópia', 'Egito', 'Uganda', 'Tanzânia', 'Quênia', 'Ruanda', 'Burundi', 'Eritreia', 'República Democrática do Congo'],
            amazonas = ['Brasil', 'Peru', 'Colômbia', 'Venezuela', 'Equador', 'Bolívia', 'Guiana'],
            amur = ['Rússia', 'China', 'Mongólia']
)

for key, value in rios.items():
    paises = ''
    for rio in value:
        if paises == "":
            paises = rio
        else:
            paises = paises + ", " + rio
    print(f'O rio {key} percorre os países: {paises}')
print('\n')

Outra forma de resolver é utilizando o join, onde ele transforma uma lista numa string a partir de um delimitador. Por exemplo:

print(', '.join(['Breno', 'Anderson']))

Retornará:

Breno, Anderson

Com isso seu código ficaria:

rios = dict(nilo = ['Sudão', 'Sudão do Sul', 'Etiópia', 'Egito', 'Uganda', 'Tanzânia', 'Quênia', 'Ruanda', 'Burundi', 'Eritreia', 'República Democrática do Congo'],
            amazonas = ['Brasil', 'Peru', 'Colômbia', 'Venezuela', 'Equador', 'Bolívia', 'Guiana'],
            amur = ['Rússia', 'China', 'Mongólia']
)

for key, value in rios.items():
    print(f"O rio {key} percorre os países: {', '.join(value)}")

As duas formas demonstradas, dará o seguinte resultado:

O rio nilo percorre os países: Sudão, Sudão do Sul, Etiópia, Egito, Uganda, Tanzânia, Quênia, Ruanda, Burundi, Eritreia, República Democrática do Congo
O rio amazonas percorre os países: Brasil, Peru, Colômbia, Venezuela, Equador, Bolívia, Guiana
O rio amur percorre os países: Rússia, China, Mongólia

Espero ter colaborado com sua dúvida.