2015-07-11 3 views
3

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

#dictionaries 
bill = { 
    "name": "Bill", 
    "job": "Policeman", 
    "hobbies": ["rugby","music","mischief"], 
} 
jill = { 
    "name": "Jill", 
    "job": "Lawyer", 
    "hobbies": ["driving","clubbing","basketball"], 
} 
will = { 
    "name": "Will", 
    "job": "Builder", 
    "hobbies": ["football","cooking","beatboxing"], 
} 

#list of citizens 
citizens = [bill,jill,will] 

#print keys with their values for each citizen 
def citizen_info(citizens): 
    for citizen in citizens: 
     for item in citizen: 
      print ("%s: " + str(citizen[item])) % (item) 
     print "" 

#Calling citizen_info 
citizen_info(citizens) 

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

job: Policeman 

name: Bill 

hobbies: ['rugby', 'music', 'mischief'] 

job: Lawyer 

name: Jill 

hobbies: ['driving', 'clubbing', 'basketball'] 

job: Builder 

name: Will 

hobbies: ['football', 'cooking', 'beatboxing'] 

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

hobbies: rugby music mischief 

После Гугла этой проблемы и просмотрел на этом сайте, я могу найти решение, где решена эта проблема, но если не работает там это еще один элемент в словаре, который не является списком.

ответ

2
def citizen_info(citizens): 
    for citizen in citizens: 
     for item in citizen: 
      if type(citizen[item]) is list : 
       print ("%s: " + " ".join(citizen[item])) % (item) 
      else : 
       print ("%s: " + str(citizen[item])) % (item) 
     print "" 

или

def citizen_info2(citizens): 
    for citizen in citizens: 
     for item in citizen: 
      if item == "hobbies" : 
       print ("%s: " + " ".join(citizen[item])) % (item) 
      else : 
       print ("%s: " + str(citizen[item])) % (item) 
     print "" 

Если у вас есть список а = [ '1', '2', '3'] и хотите присоединиться строки внутри:

" ".join(a) 
", ".join(a) 
+0

Да, действительно, как первый ответ, поскольку он полезен для добавления будущих предметов в словари, и, конечно же, он работает. Ура! – Matthew

+0

использование 'issinstance' нет type –

0

Просто петля через ключ хобби отдельно:

#print keys with their values for each citizen 
def citizen_info(citizens): 
    for citizen in citizens: 
     for item in citizen: 
      if item != "hobbies": 
       print(("%s: " + str(citizen[item])) % (item)) 
      else: 
       print("hobbies", end="") 
       for hobby in citizen[item]: 
        print(hobby, end="") 
       print("") 
    print("") 
+1

Вы использовали использование 'print' из Python 2 (где' print' является оператором a ключевое слово) и из Python 3 (где 'print' является функцией). Пожалуйста, отрегулируйте свой ответ на любую версию (Python 2 будет оптимальным, поскольку он используется в вопросе). – werkritter

+1

Было исправлено несколько других исправлений (особенно первая «печать», которая оставалась инструкцией), поэтому я исправил их для вас. – werkritter

1

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

def citizen_info(citizens): 
    for citizen in citizens: 
     for item in citizen: 
      print ("%s: " + str(" ".join(citizen[item])) if isinstance(citizen[item], list) else "%s: " + str(citizen[item])) % (item) 
     print "" 
0

Посмотрите, подходит ли это для вас:

def citizen_info(citizens): 
    for citizen in citizens: # loop through the citizens 
    for key, value in citizen.items(): # get keys and values 
     if type(value) is list: # test if the value is a list 
     value = " ".join(value) # join the list into a string 
     print("{}: {}".format(key, value)) # print however you want 
1
def citizen_info(citizens): 
    for citizen in citizens: 
     for item in citizen: 
      if item != 'hobbies': 
       print ('{}: {}'.format(item, citizen[item]) # new style string formatting, much easier to read imo 
      else: 
       print ('{}: {}'.format(item, ' '.join(citizen[item])) 
     print "" 

Использование нового стиля форматирования строк и просто управление ключом hobbies по-разному.

Смежные вопросы