【发布时间】:2018-12-01 02:08:09
【问题描述】:
我想创建一个具有预定列表的字典,但是,我似乎无法弄清楚如何避免覆盖而不是追加,而且我不确定是否可以避免导入任何其他模块。
范围是我有一个包含 1 列字符名称的数据框,其中 ID 号附加到从读取的 excel 文件sega_df 中的名称上:
Character
0 Amy (335)
1 Tails (359)
2 Shadow (357)
3 Shadow (357)
4 Blaze (337)
然后我有一个所有字符的列表,characters,没有他们的 ID 号:
['Sonic', 'Knuckles', 'Tails', 'Amy', 'Cream', 'Shadow', 'Rouge', 'Silver', 'Blaze']
我想创建一个字典,这样我就可以通过用characters 中字符的len() 分割每一行条目来替换sega_df.Character,从而产生desired_sega_df:
Character
0 Amy
1 Tails
2 Shadow
3 Shadow
4 Blaze
我要创建的字典将包含不带 ID 号的字符名称键和名称的 len() 值。字典是slice:
{'Sonic': 5,
'Knuckles': 8,
'Tails': 5,
'Amy': 3,
'Cream': 5,
'Shadow': 6,
'Rouge': 5,
'Silver': 6,
'Blaze': 5}
即使我使用.update(),它仍然会反复覆盖,仅以Blaze 作为键,5 作为值。
>>> for character in characters:
... slice = {character: len(character)}
... slice.update({character:len(character)})
...
>>> slice
{'Blaze': 5}
我的问题是:如何修改循环以将所有字符的键值对添加到 slice,而不是不断地覆盖它们?
【问题讨论】:
-
只是将
slice = {}移出循环?为什么每次迭代都创建和更新同一个字典? -
删除
slice={character:len(character)}并在循环开始之前添加slice = dict() -
您每次都在创建一个新字典。
slice = {...}将一个新的字典对象分配给slice。不要那样做。并且不要使用dict.update()将一个键值对添加到字典中。在循环外创建一个空字典once。在循环中,添加带有slice[character] = len(character)的键值对。 -
并不是说您正在做的任何事情都不能通过使用拆分更简单地完成。你的名字都不包含空格,所以你可以使用
sega_df['Character'] = sega_df['Character'].str.split().str[0] -
这似乎是许多编程语言中最常见的初学者错误之一,每次都通过循环而不是之前初始化收集变量。我希望我能理解导致它的想法,以及如何改进编程教育以避免它。
标签: python pandas dictionary for-loop