首页 > 解决方案 > 使用列表中的值计数创建字典

问题描述

我试图弄清楚如何根据列表中的每个项目创建一个字典,其中的键为学校,并评估胜负平局。例如,调用 my_dict['Clemson'] 将返回字符串 "1-1-1" "

team_score_list =[['Georgia', 'draw'], ['Duke', 'loss'], ['Virginia Tech', 'win'], ['Virginia', 'loss'], ['Clemson', 'loss'], ['Clemson', 'win'], ['Clemson', 'draw']]

上述列表的输出应该是以下字典:

{'Georgia': 0-0-1, 'Duke': 0-1-0, 'Virginia Tech': 1-0-0, 'Virginia': 0-1-0, 'Clemson': 1-1-1}

就上下文而言,原始数据来自 CSV,其中每一行的形式为日期、对手、位置、点数、反对点。

例如:2016-12-31,Kentucky,Neutral,33,18。

我已经设法将数据整理到上面的列表中(尽管可能不是以最有效的方式),但是只是不确定如何将其转换为上面的格式。

任何帮助将不胜感激!

标签: python-3.x

解决方案


我现在明白你的意思了:

你可以做

a = dict()
f = lambda x,s: str(int(m[x]=='1' or j==s))
for (i,j) in team_score_list: 
    m = a.get(i,'0-0-0')
    a[i] = f"{f(0,'win')}-{f(2,'draw')}-{f(4,'loss')}"

{'Georgia': '0-1-0',
 'Duke': '0-0-1',
 'Virginia Tech': '1-0-0',
 'Virginia': '0-0-1',
 'Clemson': '1-1-1'}

现在这只是这个例子的答案。如果您有很多数据,最好使用列表然后在最后加入。例如

b = dict()
g = lambda x,s: str(int(m[x]) + (j==s))
for (i,j) in team_score_list: 
    m = b.get(i,[0,0,0])
    b[i] =[g(0,"win"),g(1,"draw"),g(2,"loss")]

{key:'-'.join(val) for key,val in b.items()}
{'Georgia': '0-1-0',
 'Duke': '0-0-1',
 'Virginia Tech': '1-0-0',
 'Virginia': '0-0-1',
 'Clemson': '1-1-1'}

推荐阅读