簡體   English   中英

(key:value)鍵如字典格式,值如列表格式

[英](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')}

有關獲得方括號而不是括號的任何建議,以及如何在列表中通過或失敗的字符串。 謝謝。

您正在使用其他值壓縮最后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']}

一口氣說出您需要做的事情,可以得出:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM