如何有选择地更改列表中的元素,该元素是 python 字典中的值 [duplicate]

How to selectively change elements in a list that is a value in a python dictionary [duplicate]

提问人:THill3 提问时间:10/18/2023 最后编辑:THill3 更新时间:10/18/2023 访问量:38

问:

我正在研究一些旧的 MLB 数据,并尝试编写一些代码来跟踪每支球队的 W/L 记录。数据被组织成一堆行,其中每个连续的对(0&1、2&3、usw.)是玩游戏的两支球队。

前六行如下所示。(欢迎您自己想象额外的 4918 行)

{'Date': {0: 401, 1: 401, 2: 401, 3: 401, 4: 401, 5: 401},
 'VH': {0: 'V', 1: 'H', 2: 'V', 3: 'H', 4: 'V', 5: 'H'},
 'Team': {0: 'PIT', 1: 'CUB', 2: 'ATL', 3: 'PHI', 4: 'ARI', 5: 'SDG'},
 'Final': {0: 5, 1: 3, 2: 2, 3: 3, 4: 7, 5: 8}}

我创建了一个字典,其中每个团队名称都是一个键,每个键的值是该团队的记录。

records = dict.fromkeys(MLB21_data['Team'].unique(),[0,0]) #Initialize the dictionary with [0,0] records

我的问题是,当我对一个列表中的一个(整数)元素进行更改时,该元素是一个团队的值,然后对字典中每个值的列表进行更改。

下面是一些示例代码,旨在更新一支球队在其整体记录中的获胜次数

i = 1
print(MLB21_data.at[i-1,'Team'])
records[MLB21_data.at[i-1,'Team']][0] += 1
print(records)

这是一次更新后的结果

PIT
{'PIT': [1, 0], 'CUB': [1, 0], 'ATL': [1, 0], 'PHI': [1, 0], 'ARI': [1, 0], 'SDG': [1, 0], 'LAD': [1, 0], 'COL': [1, 0], 'STL': [1, 0], 'CIN': [1, 0], 'TOR': [1, 0], 'NYY': [1, 0], 'CLE': [1, 0], 'DET': [1, 0], 'TEX': [1, 0], 'KAN': [1, 0], 'CWS': [1, 0], 'LAA': [1, 0], 'HOU': [1, 0], 'OAK': [1, 0], 'MIN': [1, 0], 'MIL': [1, 0], 'TAM': [1, 0], 'MIA': [1, 0], 'SFO': [1, 0], 'SEA': [1, 0], 'BAL': [1, 0], 'BOS': [1, 0], 'NYM': [1, 0], 'WAS': [1, 0]}

这是我在那次更新后想要的

PIT
{'PIT': [1, 0], 'CUB': [0, 0], 'ATL': [0, 0], 'PHI': [0, 0], 'ARI': [0, 0], 'SDG': [0, 0], 'LAD': [0, 0], 'COL': [0, 0], 'STL': [0, 0], 'CIN': [0, 0], 'TOR': [0, 0], 'NYY': [0, 0], 'CLE': [0, 0], 'DET': [0, 0], 'TEX': [0, 0], 'KAN': [0, 0], 'CWS': [0, 0], 'LAA': [0, 0], 'HOU': [0, 0], 'OAK': [0, 0], 'MIN': [0, 0], 'MIL': [0, 0], 'TAM': [0, 0], 'MIA': [0, 0], 'SFO': [0, 0], 'SEA': [0, 0], 'BAL': [0, 0], 'BOS': [0, 0], 'NYM': [0, 0], 'WAS': [0, 0]}

正如您可能想象的那样,我遍历数据以填充字典。

为什么我得到的是一个结果而不是另一个? 是什么让 Python 给了我我想要的结果?

python list loops 字典

评论

0赞 Ignatius Reilly 10/18/2023
我刚刚用谷歌搜索了 MLB。显然,它指的是一项在美国、古巴和加拿大广为人知的运动。如果您发布一个最小的可重现示例,它将帮助您获得广泛社区的帮助,避免一些与程序本身无关的特定主题的 jergon。
0赞 THill3 10/18/2023
特定于运动的标签并不重要。与此相关的任何内容都可以理解为简单的变量或键值。我包含了用于创建字典的代码、用于更新值的代码、我得到的结果以及我想要的结果。我的例子是不可重现的怎么办?
0赞 Ignatius Reilly 10/18/2023
我认为您的问题可能与子列表中意外反映的列表更改列表有关。
0赞 Ignatius Reilly 10/18/2023
更好地了解您的问题可以帮助我们提出替代方法(当然,除非您只想了解错误的原因)。即使在这种情况下,有一个最小的示例也会有所帮助,这样我们就可以重现问题。顺便说一句,您的数据最初是在 pandas 数据帧中吗?如果是这样,请考虑发布结果,以便我们可以复制粘贴它。df.head(5).to_dict()
2赞 ShadowRanger 10/18/2023
@THill3:你用一个理解来代替,根据重复。.dictcomp 的每次迭代都会从头开始重新执行值的创建,而不是重用同一原始值的别名,因此值确实是不同的。dictrecords = {x: [0, 0] for x in MLB21_data['Team'].unique()}listlist

答: 暂无答案