[英](key:value) key as in dictionary format and value as in list format
我想得到這樣的東西:
{'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')}
有關獲得方括號而不是括號的任何建議,以及如何在列表中通過或失敗的字符串。 謝謝。
您正在使用其他值壓縮最后pass
或fail
字符串,因此將其視為要壓縮的字符序列。
首先壓縮,然后包括pass
或fail
:
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']}
一口氣說出您需要做的事情,可以得出:
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']}
函數內部的縮進似乎是最大的問題,特別是它循環遍歷得分並僅在最后設置p
的最終值這一事實。 您需要某種方式來存儲通過和失敗的每個分數,而不僅僅是最后一個。
mydict
線確實也很混亂,我很難mydict
(從現在開始三個月后,另一位閱讀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
如果您擔心性能,那么可以肯定地減少了理解的次數,但這至少更具可讀性且更容易調試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.