(键:值)键,如字典格式,值,列表格式

时间:2016-03-01 08:52:22

标签: python list python-3.x dictionary

我想得到这样的东西:

{'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')}

有关获取方括号而不是括号的任何建议,以及如何在列表中实现通过或失败的字符串。谢谢。

3 个答案:

答案 0 :(得分: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']}

答案 1 :(得分: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']}

答案 2 :(得分:0)

函数内部的缩进似乎是最大的问题,特别是它在分数上循环并且最后只设置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

如果你担心性能问题,你当然可以减少理解的数量,但这至少更易读,也更容易调试。