Python: Редактирование словарных ключей - Использование метода Strip - PullRequest
1 голос
/ 25 октября 2019

У меня есть словарь, как показано ниже:

Dict = {' Chicago ': 4, ' Washington ': 9, ' LA ': 26, ' Boston ': 12, ' Seattle ': 2}

Я хочу редактировать ключ каждой записи, но не значения. Клавиши, которые вы видите, имеют строку, которая включает пробелы в начале и конце: 'Чикаго', 'Вашингтон', 'ЛА' .

Я хочу сгруппировать и обрезать белыепространство от ключей. Оставив мне следующий словарь.

Dict = {'Chicago': 4, 'Washington': 9, 'LA': 26, 'Boston': 12, 'Seattle': 2}

Как бы я это сделал? Может быть, используя метод replace(" ", "") или strip()?

При попытке использовать метод стриптиза я получаю сообщение об ошибке:

AttributeError: 'int' object has no attribute 'strip'

Ответы [ 5 ]

4 голосов
/ 25 октября 2019

Ваша ошибка говорит о том, что вы пытались преобразовать значения вместо ключей, но в любом случае это должно работать:

new_dict = {key.strip(): value for key, value in old_dict.items()}
1 голос
/ 25 октября 2019

Используйте dict понимание:

  • Кстати, не используйте типы данных Python в качестве имени ваших переменных (например, Dict)
  • DictПонимание
  • При циклическом перемещении словарей можно одновременно извлечь key и соответствующий value, используя метод .items().
  • .strip только на key
data = {' Chicago ': 4, ' Washington ': 9, ' LA ': 26, ' Boston ': 12, ' Seattle ': 2}

data = {k.strip(): v for (k, v) in data.items()}

>>> {'Chicago': 4, 'Washington': 9, 'LA': 26, 'Boston': 12, 'Seattle': 2}
0 голосов
/ 25 октября 2019

Вы не можете редактировать ключи напрямую, так как словари являются хеш-таблицами. Изменение ключа меняет его хэш, поэтому у вас есть два концептуальных варианта.

Первый - заменить весь словарь, что, на мой взгляд, более питонно:

dct = {k.strip(): v for k, v in dct.items()}

Или альтернативно:

dct = {k.strip(): dct[k] for k in dct}

Второй вариант - сохранить один и тот же объект словаря, но заменить сопоставления одно за другим. Это осложняется тем, что вам не следует изменять ключи, особенно при удалении, пока вы выполняете итерацию по словарю. Сначала вы должны сделать отдельную копию оригинальных ключей и работать с этим:

for k in list(dct):
    v = dct.pop(k)
    dct[k.strip()] = v
0 голосов
/ 25 октября 2019

Я думаю, что самый простой способ сделать это - зациклить клавиши следующим образом. Я прокомментировал код по пути.

#Your dictionary
dict = {' Chicago ': 4, ' Washington ': 9, ' LA ': 26, ' Boston ': 12, ' Seattle ': 2}

#Puts all keys of the dictionary into a list
keys = list(dict)

#iterates over dictionary keys
for key in keys:

    #for every key, we make a new dictionary item with the 'stripped' key and remove the old one
    dict[key.strip()] = dict[key]
    del dict[key]

print(dict)

Это дает нам тот же словарь и те же значения, но с пробелами в начале / конце, удаленными из ключей:

{'Chicago': 4, 'Washington': 9, 'LA': 26, 'Boston': 12, 'Seattle': 2}
0 голосов
/ 25 октября 2019

Самый простой способ сделать это:

Dict2 = {}
for key in Dict:
   Dict2[key.strip()] = Dict[key]
Dict = Dict2

Или вы можете использовать понимание, чтобы облегчить это:

Dict = {key.strip():value for (key,value) in Dict}
...