首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建将运动项目与列表[[game1],[game2]],[[game1],[game2] ]分开的字典{week1: game1,game2,game3,ect}

创建将运动项目与列表[[game1],[game2]],[[game1],[game2] ]分开的字典{week1: game1,game2,game3,ect}
EN

Stack Overflow用户
提问于 2020-06-25 00:36:06
回答 1查看 33关注 0票数 0

如果我犯了任何错误,或者遗漏了任何信息,请道歉,这是我在stackoverflow上的第一个问题。

我正在尝试创建一个python程序,它以循环方式创建fixture。总体规范将是:用户输入团队名称(没有设定团队数量),然后程序创建一个按“周”拆分的字典,或者不同的排列轮换。即第1周(1v2 3v4 5v6),第2周(2v3 4v5 6v1),第3周(3v4 5v6 2v)等。在可能的情况下,任何球队都不会在主场或客场比赛。我知道只有当球队数量/2是偶数时,当奇数球队连续主客场比赛超过两次时,这才是可能的。

我已经编码了个人游戏创建者(即1v2 3v4 5v6等)下面的代码

代码语言:javascript
复制
teams = ['1', '2', '3', '4', '5', '6', '7', '8', '9']

if len(teams) % 2:
    teams.append('Rest week')
n = len(teams)
matchs = []
fixtures = []
return_matchs = []
for fixture in range(1, n):
    for i in range(n//2):
       matchs.append([teams[i], teams[n - 1 - i]])
       return_matchs.append([teams[n - 1 - i], teams[i]])
    teams.insert(1, teams.pop())
    fixtures.insert(len(fixtures)//2, matchs)
    fixtures.append(return_matchs)
    matchs = []
    return_matchs = []

我已经创建了一个“团队”列表,但为了便于测试。print(fixtures)时的输出为:

代码语言:javascript
复制
[[['1 v Rest week'], ['2 v 9'], ['3 v 8'], ['4 v 7'], ['5 v 6']], [['1 v 9'], ['Rest week v 8'], ['2 v 7'], ['3 v 6'], ['4 v 5']], [['1 v 8'], ['9 v 7'], ['Rest week v 6'], ['2 v 5'], ['3 v 4']], [['1 v 7'], ['8 v 6'], ['9 v 5'], ['Rest week v 4'], ['2 v 3']] ... cut ...

为简洁起见,我将其删节。显然,这段代码是按照我希望的方式工作的,但如果有人有任何建议或建议,我将不胜感激。

我遇到的问题是把这个列表分成一个字典,就像我上面提到的那样。为了便于阅读,我在寻找

代码语言:javascript
复制
[[['1 v Rest week'], ['2 v 9'], ['3 v 8'], ['4 v 7'], ['5 v 6']], [['1 v 9'], ['Rest week v 8'], ['2 v 7'], ['3 v 6'], ['4 v 5']] ...]

变成

代码语言:javascript
复制
{week1: [['1 v Rest week'], ['2 v 9'], ['3 v 8'], ['4 v 7'], ['5 v 6']], week2: [['9 v 1'], ['8 v Rest week'], ['7 v 2'], ['6 v 3'], ['5 v 4']] ...} 

我所做的是

代码语言:javascript
复制
weekDict = {}

weekDict.update({'week1': fixtures[0]})
weekDict.update(({'week2': fixtures[-1]}))
weekDict.update(({'week3': fixtures[1]}))
weekDict.update(({'week4': fixtures[-2]}))
weekDict.update(({'week5': fixtures[2]}))
...

如果团队的数量发生变化,这是非常非常冗长的,也是非常不切实际的。这段代码给出了我想要的输出类型。

代码语言:javascript
复制
{'week1': [['1 v Rest week'], ['2 v 9'], ['3 v 8'], ['4 v 7'], ['5 v 6']], 
'week2': [['2 v 1'], ['Rest week v 3'], ['9 v 4'], ['8 v 5'], ['7 v 6']], 
'week3': [['1 v 9'], ['Rest week v 8'], ['2 v 7'], ['3 v 6'], ['4 v 5']], 
'week4': [['3 v 1'], ['2 v 4'], ['Rest week v 5'], ['9 v 6'], ['8 v 7']], 
'week5': [['1 v 8'], ['9 v 7'], ['Rest week v 6'], ['2 v 5'], ['3 v 4']]}

它不能做主场和客场,所以在这方面有任何帮助都会很好。有没有更简单的方法来得到我想要的东西?我已经尝试了几个for循环,示例如下

代码语言:javascript
复制
for fixture in fixtures:
    weekDict = {}
    for i in range(len(fixtures)):
        i = 0
        num = 1
        weekDict.update({'week' + str(num): fixtures[i]})
        num += 1
        i += 1
print(weekDict)

这给了我们

代码语言:javascript
复制
{'week1': [['1', 'Rest week'], ['2', '9'], ['3', '8'], ['4', '7'], ['5', '6']]}

我卡住了!有人能帮上忙吗?

提前感谢

罗斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-25 01:36:33

您不需要在fixture上执行第二个循环。你差一点就做到了(保持下去),你只是把for循环弄错了。

代码语言:javascript
复制
weekDict = {}

for ind, fixture in enumerate(fixtures):
    weekDict.update({'week'+str(ind+1):fixture})

print(weekDict)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62559891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档