2016-03-01 72 views
0

我想是這樣的:(鍵:值)鍵在字典中的格式和值以列表形式

{'eve': [19, 50, 'fail'], 'walle': [79, 65, 'pass'], 'sandy': [28, 49, 'fail'],'bob': [15, 60, 'pass']} 

我試圖做到這一點是:

def try_dic_from_list(names, ages, scores): 
    for s in scores: 
     p= "pass" if s >=60 else "fail" 
    mydict={key:value for key,value in list(zip(names,zip(ages,scores,str(p))))} 
    print(mydict) 
print(try_dic_from_list(["walle", "sandy", "eve", "bob"], [79, 28, 19, 15], 
             [65, 49, 50, 60])) 

這輸出這樣的:

{'walle': (79, 65, 'p'), 'sandy': (28, 49, 'a'), 'eve': (19, 50, 's'), 'bob': (15, 60, 's')} 

任何建議,以獲得在方括號,而不是括號,也是我怎樣才能實現字符串通過或失敗的列表。謝謝。

回答

2

您正在使用其他值壓縮最後的passfail字符串,因此它被視爲要壓縮的字符序列。

郵編第一,則包括passfail

def try_dic_from_list(names, ages, scores): 
    return {name: [age, score, 'pass' if score >= 60 else 'fail'] 
      for name, age, score in zip(names, ages, scores)} 

演示:

>>> def try_dic_from_list(names, ages, scores): 
...  return {name: [age, score, 'pass' if score >= 60 else 'fail'] 
...    for name, age, score in zip(names, ages, scores)} 
... 
>>> try_dic_from_list(["walle", "sandy", "eve", "bob"], [79, 28, 19, 15], [65, 49, 50, 60]) 
{'bob': [15, 60, 'pass'], 'sandy': [28, 49, 'fail'], 'eve': [19, 50, 'fail'], 'walle': [79, 65, 'pass']} 
+0

非常感謝你的回答,並指出了錯誤:) – rocky25bee

+0

很高興有幫助!對不起,您只能將*一個*答案標記爲已接受;選擇一個你最感受到幫助的人! (也可以不選擇一個)。 –

+0

其實這兩個答案都是相似的。所以,我只是想選擇兩個。 – rocky25bee

1

說你需要在同一行做什麼,這給:

def try_dic_from_list(names, ages, scores): 
    return {name: [age, score, "pass" if score >= 60 else "fail"] for name, age, score in zip(names, ages, scores)} 

print(try_dic_from_list(["walle", "sandy", "eve", "bob"], [79, 28, 19, 15], 
             [65, 49, 50, 60])) 

# {'bob': [15, 60, 'pass'], 'walle': [79, 65, 'pass'], 'eve': [19, 50, 'fail'], 'sandy': [28, 49, 'fail']} 
+0

非常感謝你:) – rocky25bee

+0

那麼整潔,真棒解決方案 – BHouwens

0

th內的壓痕e函數似乎是最大的問題,具體而言,它循環遍歷分數,並且最後只爲最終值設置p。你需要一些方法來存儲通行證,並且每個分數都失敗,而不僅僅是最後一個分數。

mydict這條線也非常混亂,我很努力地從中獲益良多(另一位開發人員在閱讀本文後的三個月內閱讀本文並自己閱讀)。

所以它的工作原理,看起來多一點理智,我重寫它:

def try_dic_from_list(names, ages, scores): 
    pees = [] 
    for s in scores: 
     p= "pass" if s >=60 else "fail" 
     pees.append(p) 

    values = [list(x) for x in zip(ages, scores, pees)] 
    final_zip = zip(names, values) 

    dict = {key:value for key,value in final_zip} 
    return dict 

如果你關心性能,你當然可以減少由推導的數量,但是這至少是更可讀性更強,更易於調試。

+0

我試過一個班輪,所以它可能看起來像那樣。我想練習一個內襯。謝謝。我會記住下次:) – rocky25bee

+0

好吧,@DainDwarf的答案是一個完美的一班。很高興我可以幫忙,雖然:) – BHouwens