Python问题。让我们说我会有各种各样的名单,像这样,
[1, 5, 3, 1, 9, 10, 1, 20]
[1, 5]
[1, 2, 3, 1, 7, 10, 1, 2, 8, 21]
[1, 5, 6, 4, 0, 16, 1, 5, 6, 4, 0, 16]
这些数字代表体育比赛的得分,其中第1组是列表的前半部分,第2组是列表的后半部分。列表前半部分的最后一个数字(Team 1得分)总是游戏总数。从列表的前半部分开始的倒数第二个数字始终是游戏加时得分。列表中的第一项是第一期的得分。列表中的第二项是第二期的分数。等等,例如,[1,5]意味着第1队的总得分为1,而第2队的总得分为5.另一个例子,[1,5,3,9,9,10,1, 20]意味着第一队1队得分1分,第二段得5分,加时赛3分,总积9分,第2队得分9分,第二段得10分,得1分在加时赛中,共计20分。
我想创建一个将这些数字从列表中粘贴到字典中的函数,如果列表中有值,它应该只填充字典键。
score['sec_away_team_1'], score['sec_away_team_2'], score['sec_away_team_3'], score['sec_away_team_4'], score['sec_away_team_ot'], score['sec_away_team_total'],
score['sec_home_team_1'], score['sec_home_team_2'], score['sec_home_team_3'], score['sec_home_team_4'], score['sec_home_team_ot'], score['sec_home_team_total']
这样做的一种方法是使用很多if语句创建一个函数,如果我知道列表有多长,我可以针对如何解压缩列表做不同的场景,但是因为我将解压缩列表各种大小我认为制作如此多的if语句会很难看......如何通过一个通用函数来完成,该函数既可以从列表中生成项目,也可以使用它们并弹出它们,或者其他方式?
答案 0 :(得分:2)
此功能可以满足您的需求:
def scores_to_dict(scores):
d = {}
team_1 = ('team_1', scores[:len(scores)/2])
team_2 = ('team_2', scores[len(scores)/2:])
teams = [team_1, team_2]
for team, scores in teams:
for idx, score in enumerate(reversed(scores)):
if idx == 0:
d['%s_total' % team] = score
elif idx == 1:
d['%s_overtime' % team] = score
else:
d['%s_round_%s' % (team, len(scores)-idx)] = score
return d
测试它:
scores = [[1, 5, 3, 1, 9, 10, 1, 20],
[1,5],
[1, 2, 3, 1, 7, 10, 1, 2, 8, 21],
[1, 5, 6, 4, 0, 16, 1, 5, 6, 4, 0, 16]]
from pprint import pprint
for score in scores:
print score
pprint(scores_to_dict(score))
print '--'
输出:
>>>
[1, 5, 3, 1, 9, 10, 1, 20]
{'team_1_overtime': 3,
'team_1_round_1': 1,
'team_1_round_2': 5,
'team_1_total': 1,
'team_2_overtime': 1,
'team_2_round_1': 9,
'team_2_round_2': 10,
'team_2_total': 20}
--
[1, 5]
{'team_1_total': 1, 'team_2_total': 5}
--
[1, 2, 3, 1, 7, 10, 1, 2, 8, 21]
{'team_1_overtime': 1,
'team_1_round_1': 1,
'team_1_round_2': 2,
'team_1_round_3': 3,
'team_1_total': 7,
'team_2_overtime': 8,
'team_2_round_1': 10,
'team_2_round_2': 1,
'team_2_round_3': 2,
'team_2_total': 21}
--
[1, 5, 6, 4, 0, 16, 1, 5, 6, 4, 0, 16]
{'team_1_overtime': 0,
'team_1_round_1': 1,
'team_1_round_2': 5,
'team_1_round_3': 6,
'team_1_round_4': 4,
'team_1_total': 16,
'team_2_overtime': 0,
'team_2_round_1': 1,
'team_2_round_2': 5,
'team_2_round_3': 6,
'team_2_round_4': 4,
'team_2_total': 16}
--