我想得到这样的东西:
{'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')}
有关获取方括号而不是括号的任何建议,以及如何在列表中实现通过或失败的字符串。谢谢。
答案 0 :(得分:2)
您正在使用其他值压缩最后一个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']}
答案 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
如果你担心性能问题,你当然可以减少理解的数量,但这至少更易读,也更容易调试。