我想创建一个具有预定列表的字典,但是,我似乎无法弄清楚如何避免覆盖而不是附加,而且我不确定是否可以避免导入任何其他模块。
范围是,我有一个数据框,其中包含一列字符名称,其中通过读取sega_df
中的excel文件而在名称上附加了ID号:
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']
我想创建一个词典,以便通过用sega_df.Character
中的字符的len()
切片每个行条目来替换characters
,产生desired_sega_df
:< / p>
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
而不是连续覆盖它们?
答案 0 :(得分:1)
将您的代码更新为:
>>> slice = dict()
>>> for character in characters:
... slice.update({character:len(character)})
...
答案 1 :(得分:1)
这是Pandorable解决方案。要分割Character
,可以选择在空白处分割或在字符数上分割。哪种效果最好取决于您的数据集。
无论您选择纯Python还是Pandas解决方案,都不需要使用显式循环。
# remove last 6 characters to leave names
df['Character'] = df['Character'].str[:-6] # or, df['Chracter'].str.split().str[0]
# calculate length in new series
df['Length'] = df['Character'].map(len)
# convert to dictionary
d = df.set_index('Character')['Length'].to_dict()
print(d)
{'Amy': 3, 'Tails': 5, 'Shadow': 6, 'Blaze': 5}
答案 2 :(得分:0)
您应将slice
定义为循环外的空字典。按照目前的状态,您可以在迭代时为每个字符重新定义字典。