2015-07-11 125 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 

已经用Google搜索这个问题,并搜查通过这个网站,我可以在其中找到这个问题的解决方案,但如果没有在那里工作是字典中不是列表的另一项。

回答

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'不能输入 –

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

您将来自Python 2(其中'print'是语句的关键字)和来自Python 3(其中'print'是函数)的'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键。