Печать индексов списков из вложенных словарей, содержащих списки - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь распечатать из словаря, который состоит из вложенного словаря и списка.К сожалению, у меня проблемы с печатью элементов из списка с length > 1.Вот мой код:

animals = {
    'cats': {
                'name': 'moose', 
                'color': 'black & white', 
                'alias':'Moosalini'
            },
    'dogs': {
                'name': ['scout', 'sulley'],
                'color': 'white & orange',
                'alias': ['skump', 'skulley']
            }
    }

for animal_type, animal_info in animals.items():
    print('Animal type: ', animal_type)
    for key in animal_info:
        print(key + ': ' + animal_info[key])

Вывод - именно то, что я хочу, пока не попадет в список, связанный с 'name' под ключом 'dogs'.Мой код не будет объединять список, потому что это не строка.Я думал, что можно объединить списки так же, как строки?

Animal type:  cats
name: moose
color: black & white
alias: Moosalini
Animal type:  dogs
Traceback (most recent call last):
File "/Users/Jaron/Documents/nested dictionary.py", line 14, in <module>
    print ( key + ': ' + animal_info[key])
    TypeError: can only concatenate str (not "list") to str

Я попытался поместить функцию str () перед animal_info [ключ], которая позволяет объединение, но включает в себя заключенный в скобки список, как этот.

Animal type:  dogs
name: ['scout', 'sulley']
color: white & orange
alias: ['skump', 'skulley']

Я бы хотел, чтобы выходные данные выглядели следующим образом:

Animal type: cats
name: moose
color: black & white
alias: Moosalini
Animal type: dogs
name: scout, sulley
color: black & white
alias: skump, skulley

Как определить индекс элемента в списке в словаре, который находится во вложенном словаре, так что конкатенация строкбуду работать?Кроме того, есть ли способ сделать так, чтобы объединение списков работало с программой без сохранения скобок списка, []?Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Использовать метод соединения (строка):

if isinstance(animal_info[key], list):
    print(key + ':' + ','.join(animal_info[key]);
0 голосов
/ 06 февраля 2019

Вы должны объединить списки, чтобы преобразовать их в строки перед объединением в строки.Это возможно, используя join():

animals ={'cats':{'name': 'moose', 'color':'black & white', 'alias':'Moosalini'},
           'dogs':{'name':['scout', 'sulley'], 'color': 'white & orange',
           'alias': ['skump', 'skulley']}}

for animal_type, animal_info in animals.items():
    print(f'Animal type: {animal_type}')
    for key, value in animal_info.items():
        if isinstance(value, list):
            print(f"{key}: {', '.join(value)}")
        else:
            print(f'{key}: {value}')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...