2015-07-11 64 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鍵。