带循环附加到字典

时间:2018-06-21 16:42:41

标签: python pandas dictionary for-loop

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

范围是,我有一个数据框,其中包含一列字符名称,其中通过读取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而不是连续覆盖它们?

3 个答案:

答案 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定义为循环外的空字典。按照目前的状态,您可以在迭代时为每个字符重新定义字典。