用循环附加到字典

新手上路,请多包涵

我想创建一个带有预定列表的字典,但是,我似乎无法弄清楚如何避免覆盖而不是追加,而且我不确定是否可以避免导入任何其他模块。

范围是我有一个包含 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']

I want to create a dictionary so I can replace sega_df.Character ’s by slicing each row entry with the len() of the characters in characters , producing 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 而不是不断地覆盖它们?

原文由 florence-y 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 603
2 个回答

将您的代码更新为:

 >>> slice = dict()
>>> for character in characters:
...     slice.update({character:len(character)})
...

原文由 Venkata Gogu 发布,翻译遵循 CC BY-SA 4.0 许可协议

这是 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}

原文由 jpp 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题