光线棒球运动员Python字典

2024-10-01 07:47:07 发布

您现在位置:Python中文网/ 问答频道 /正文

第四步是我真正需要答案的地方。在

  1. 为九条坦帕湾鳐鱼编一本字典。使用球员名称作为键和每个值的列表。这就是我所拥有的:

    rays_players = { 'DeJesus': ['DH', 6, 299],
             'Loney': ['1B', 4, 222],
             'Rivera': ['C', 9, 194],
             'Forsythe': ['2B', 5, 304],
             'Souza Jr': ['RF', 2, 229],
             'Longoria': ['3B', 3, 282],
             'Cabrera': ['SS', 7, 214],
             'Kiermaier': ['CF', 1, 240],
             'Guyer': ['LF', 8, 274] }
    
  2. 每一个值列表都应该包含玩家所扮演的位置、击球顺序和当前击球平均值。见上文

  3. 字典完成后,使用for循环显示字典键和值。这就是我得到的:这就是我拥有的:

    for key in rays_players:
        print(key, rays_players[key])
    
  4. 接下来,使用loop(s)打印“lineup”(按击球顺序排列的字典)。我如何订购这个?

    for key in sorted(rays_players.items(), key=lambda v: (v)):
        print ("%s: %s" % (key))
    

    这是在正确的轨道上吗?

    步骤4应该是这样的:

    Batting 1: CF Kiermaier, current avg: 240
    Batting 2: RF Souza Jr, current avg: 229
    Batting 3: 3B Longoria, current avg: 282
    Batting 4: 1B Loney, current avg: 222
    Batting 5: 2B Forsythe, current avg: 304
    Batting 6: DH DeJesus, current avg: 299
    Batting 7: SS Cabrera, current avg: 214
    Batting 8: LF Guyer, current avg: 274
    Batting 9: C Rivera, current avg: 194
    

Tags: key列表for字典currentavgdhplayers
1条回答
网友
1楼 · 发布于 2024-10-01 07:47:07

在一定程度上,如果对数据采用不适当的格式,可能会使问题变得更加困难(别担心,初学者通常会这样做)。所以你可能想问问自己字典是不是最合适的结构。在

第3步的排序方向是正确的,但是对于元素key你想按排序顺序排序,即key[1][1](顺便说一句,在遍历字典的条目时,这是一个糟糕的变量名选择)。在

你应该找到这个发球排序和打印你的击球顺序:

print "Rays Starters"
for key in sorted(rays_players.items(), key=lambda v: (v[1][1])):
    print ("%s: %s" % (key))

不过,这并不能使sort键非常明显,因此您可能希望定义一个简单的类,该类允许您按名称引用播放器属性,如下所示:

^{pr2}$

然后,您可以将玩家保留在如下列表中。在

players = [Player('DeJesus', 'DH', 6, 299),
           Player('Loney', '1B', 4, 222),
           Player('Rivera', 'C', 9, 194),
           Player('Forsythe', '2B', 5, 304),
           Player('Souza Jr', 'RF', 2, 229),
           Player('Longoria', '3B', 3, 282),
           Player('Cabrera', 'SS', 7, 214),
           Player('Kiermaier', 'CF', 1, 240),
           Player('Guyer', 'LF', 8, 274)]

print "Rays Starters"
print "Rays Starters"
for p in sorted(players, key=lambda v: v.order):
    print ("Batting %s: %s %s, current average %s" % (p.order, p.position, p.name, p.average))

这不仅使你在击球顺序上的排序更加明显,而且还允许你根据需要挑选出单独的属性。在

另一种格式化方法是使用更新的.format()string方法(它肯定是后移植到2.7,但我不知道它是否在早期的python2版本中):

print "Rays Starters"
for p in sorted(players, key=lambda v: v.order):
    print ("Batting {0.order}: {0.position} {0.name}, current average {0.average}".format(p))

至于更新运行顺序,我想你需要找到一个具体的球员的名字,而不是简单地知道他们出现在名单上的位置。在

下面是一个小helper函数,它将为具有给定名称的玩家返回正确的列表索引:

def find_player(name):
    for n, player in enumerate(players):
        if player.name == name:
            return n

print "Longoria is element number", find_player('Longoria')

应该显示print语句

Longoria is element number 5

然后,可以使用此选项按以下方式更改播放器列表:

players[find_player("Rivera")] = Player('Wilson', 'C', 9, 152)
players[find_player("DeJesus")] = Player('Beckham', 'DH', 6, 200)

print "Rays Starters"
for p in sorted(players, key=lambda v: v.order):
    print ("Batting {0.order}: {0.position} {0.name}, current average {0.average}".format(p))

给出输出

Rays Starters
Batting 1: CF Kiermaier, current average 240
Batting 2: RF Souza Jr, current average 229
Batting 3: 3B Longoria, current average 282
Batting 4: 1B Loney, current average 222
Batting 5: 2B Forsythe, current average 304
Batting 6: DH Beckham, current average 200
Batting 7: SS Cabrera, current average 214
Batting 8: LF Guyer, current average 274
Batting 9: C Wilson, current average 152

相关问题 更多 >