Присоединение к словарю с циклом

1

Я хочу создать словарь с заранее определенным списком, однако я не могу понять, как избежать перезаписи вместо добавления, и я не уверен, могу ли я избежать импорта каких-либо других модулей.

Объем заключается в том, что у меня есть кадр данных из 1 столбца имен символов с идентификационными номерами, прикрепленными к именам от чтения файла excel, sega_df:

          Character
0         Amy (335)
1       Tails (359)
2      Shadow (357)
3      Shadow (357)
4       Blaze (337)

Затем у меня есть список всех символов, characters, без их идентификационных номеров:

['Sonic', 'Knuckles', 'Tails', 'Amy', 'Cream', 'Shadow', 'Rouge', 'Silver', 'Blaze']

Я хочу создать словарь, чтобы я мог заменить sega_df.Character, нарезая каждую запись строки sega_df.Character len() characters, создавая desired_sega_df:

         Character
    0          Amy
    1        Tails
    2       Shadow
    3       Shadow
    4        Blaze

Словарь, который я хочу создать, будет иметь ключи имен символов без их идентификационных номеров и значения 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 а не постоянно их переписывать?

Теги:
pandas
for-loop
dictionary

3 ответа

0
Лучший ответ

Обновите свой код до:

>>> slice = dict()
>>> for character in characters:
...     slice.update({character:len(character)})
...
  • 4
    Почему все используют dict.update() для постоянного добавления одной пары ключ-значение? Просто используйте slice[character] = len(character) .
  • 2
    Я согласен, мы можем использовать как update и assign даже для одной пары ключ-значение. Кроме того, update намного медленнее, чем assign , но OP использовал обновление. Чтобы ему было понятно, я следовал тому же стилю.
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}
  • 1
    Спасибо за подход Панды.
0

Вы должны определить slice как пустой словарь вне вашего цикла. В настоящее время вы переопределяете словарь для каждого символа по мере повторения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню