Как поменять название ключа в словаре python
Перейти к содержимому

Как поменять название ключа в словаре python

  • автор:

Rename a Key in a Python Dictionary

When working with dictionaries it might happen that you need to modify the key name without changing its value for a particular key-value pair. In this tutorial, we will look at how to rename a key in a Python dictionary with the help of some examples.

Can we rename a key in a dictionary in Python?

There is no direct way of renaming a key in a Python dictionary. But, you can achieve the end result using the following steps –

  1. Remove the old key to value pair from the dictionary.
  2. Add the new key to value pair to the dictionary.

The order of the above steps is not important so long as you use the same value for the new key.

How to rename a key in a Python dictionary?

To rename a Python dictionary key, use the dictionary pop() function to remove the old key from the dictionary and return its value. And then add the new key with the same value to the dictionary.

The following is the syntax –

Let’s now look at some examples of using the above syntax.

We have a dictionary containing countries to their capital cities mapping. Let’s rename the key “USA” to “United States of America”.

Here we are removing the old key, “USA” and returning its value using the pop() function and then assigning the returned value to the new key, “United States of America”. You can see that instead of “USA” we have “United States of America” in the dictionary.

Let’s look at another example.

Here we rename “UK” to “United Kingdom”.

Note that we’re not really renaming here. We are removing the old key and then adding the new key with the same value thereby getting the same end result as a rename operation (if it were available).

Using del keyword

Alternatively, you can use the del keyword instead of the pop() function to remove a key from a dictionary. Check out this tutorial on the differences between the two.

We get the same result as above.

Note that if the key is not present in the dictionary, removing using the del keyword will result in a KeyError .

You might also be interested in –

Subscribe to our newsletter for more informative guides and tutorials.
We do not spam and you can opt out any time.

Как изменить имена ключей в словаре python?

Добрый день.
Есть словарь:
d1 = <1:'a', 2:'b', 3:'c', 4:'d', 5:'e'>
В нем необходимо заменить имена некоторых ключей. Например:

Как это правильнее сделать? Вариант с кучей if выглядит громоздким:

  • Вопрос задан более трёх лет назад
  • 19582 просмотра
  • Facebook
  • Вконтакте
  • Twitter

Возможности просто переименовать ключ в словарях питона нет.

Пример присваивания новому ключу значение из старого ключа, с удалением старого ключа.
dictionary[new_key] = dictionary.pop(old_key)

Если же вопрос ваш в том, как построить сам алгоритм замены, то могу предложить следующий:

Изменить название ключа в словаре

если вы хотите изменить один ключ: вы можете пойти с любым из приведенных выше предложений.

В Python 2.7 и выше вы можете использовать словарное понимание: это пример, с которым я столкнулся при чтении CSV с использованием DictReader. Пользователь добавил суффикс всех имен столбцов к «:»

чтобы избавиться от конечного ‘:’ в ключах:

предположим, что мы хотим изменить ключи элементов списка p=[‘a’, ‘b’]. следующий код будет делать:

Так как ключи — это словари, используемые для поиска значений, вы не можете их изменить. Самое близкое, что вы можете сделать, это сохранить значение, связанное со старым ключом, удалить его, а затем добавить новую запись с ключом замены и сохраненным значением. Несколько других ответов иллюстрируют различные способы, которыми это может быть достигнуто.

Нет прямого способа сделать это, но вы можете удалить, а затем назначить

или выполните массовые изменения ключа:

Если у вас сложный диктат, это значит, что внутри диктанта есть список или список:

Вы можете использовать понимание словаря iff/else. Этот метод позволяет заменить произвольное количество ключей в одной строке.

Чтобы преобразовать все ключи в словаре

Предположим, это ваш словарь:

Чтобы преобразовать все тире в подчеркивания в образце словарного ключа:

Эта функция получает dict и еще один dict, определяющий, как переименовывать ключи; он возвращает новый dict с переименованными ключами:

В случае замены всех ключей сразу. Здесь я держу ключи.

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

Заменяя пробелы в клавишах dict символами подчеркивания , я использую этот простой маршрут .

Или просто dictionary.pop(k) Обратите внимание, что ‘er r’, которая может быть любой строкой, станет новым значением, если ключ отсутствует в словаре, чтобы иметь возможность заменить его, чего здесь не может произойти. Аргумент является необязательным, в другом аналогичном коде, где может произойти ошибка KeyError, добавленный arg избегает его и все же может создать новый ключ с этой ошибкой или тем, что вы установили в качестве значения.

.copy () позволяет избежать . изменения размера словаря во время итерации.

.keys () не требуется, k — это каждый ключ, k — это ключ в моей голове.

Изменить название ключа в словаре

который поднимет KeyError if dictionary[old_key] не определено. Обратите внимание, что это будем удалять dictionary[old_key] .

ответ дан 15 мая ’16, 21:05

Это вызовет ошибку KeyError в любом случае, если ключ не существует, но вы можете использовать dict[new_value] = dict.pop(old_value, some_default_value) чтобы избежать этого — Тобиас Кинцлер

Обратите внимание, что это также повлияет на положение ключа в CPython 3.6+ / Pypy и Python 3.7+. Такова в целом позиция old_key будет отличаться от позиции new_key . — Norok2

@TobiasKienzler Осторожно, не используйте dict однако как имя переменной. — мяукать

@Mew Совершенно верно, жаль, что я не могу редактировать этот комментарий �� — Тобиас Кинцлер

если вы хотите поменять все ключи:

если вы хотите изменить одну клавишу: вы можете воспользоваться любым из приведенных выше предложений.

ответ дан 10 дек ’10, 07:12

Это создает новый словарь, а не обновляет существующий, что может быть не важно, но не то, что было запрошено. — Мартино

ответ дан 10 дек ’10, 07:12

В python 2.7 и выше вы можете использовать понимание словаря: это пример, с которым я столкнулся при чтении CSV с помощью DictReader. Пользователь добавил ко всем именам столбцов суффикс «:»

чтобы избавиться от завершающего символа ‘:’ в ключах:

ответ дан 22 окт ’19, 10:10

«AttributeError: объект ‘dict’ не имеет атрибута ‘replace'» — user1318135

user1318125, я бы посоветовал попробовать скопировать пасту. Это работает для меня в консоли python (.replace выполняется в строке, которая используется в качестве ключа) — север. мистер

Поскольку ключи — это то, что словари используют для поиска значений, вы не можете их изменить. Самое близкое, что вы можете сделать, — это сохранить значение, связанное со старым ключом, удалить его, а затем добавить новую запись с ключом замены и сохраненным значением. Некоторые другие ответы иллюстрируют различные способы этого.

Если у вас сложный dict, это означает, что в dict есть dict или список:

Нет прямого способа сделать это, но вы можете удалить, а затем назначить

или сделать массовые ключевые изменения:

ответ дан 10 дек ’10, 07:12

@Erich С первого взгляда, d = dict(. ) и d = <. >это то же самое. Есть еще один комментарий от 2013 года, который предлагает такое же изменение другого ответа. Итак, я предполагаю, что они не должны быть одинаковыми, и что они должны различаться в каком-то значимом смысле. Что это значит? — Неизвестно0059

@ Unknow0059 Насколько я понимаю, это синтаксический сахар. По крайней мере, это была моя причина добавить этот комментарий. На практике могут быть различия в том, как dict() ведет себя при передаче объектов генератора по сравнению с тем, как <. >ведет себя. Для некоторого направления чтения я бы сказал, начните здесь: python.org/dev/peps/pep-0274 — Эрих

предположим, что мы хотим изменить ключи к элементам списка p = [‘a’, ‘b’]. подойдет следующий код:

эта функция получает dict и еще один dict, определяющий, как переименовывать ключи; он возвращает новый dict с переименованными ключами:

ответ дан 14 авг.

Пожалуйста, не отправляйте только код в качестве ответа. Пожалуйста, объясните свой ответ / реализацию. — Миланбалаз

Привет! Хотя этот код может решить вопрос, включая объяснение То, как и почему это решает проблему, действительно поможет улучшить качество вашего поста и, вероятно, приведет к увеличению числа голосов «за». Помните, что вы отвечаете на вопрос для будущих читателей, а не только для человека, который задает его сейчас. Пожалуйста редактировать ваш ответ, чтобы добавить пояснения и указать, какие ограничения и допущения применяются. — Брайан

Это создает копию словаря. Я разочарован. Это как сказал Мартино. Вы можете проверить это на практике с помощью print(inp_dict) вместо этого assert . Тем не менее, лучше, чем альтернатива. — Неизвестно0059

Чтобы преобразовать все ключи в словаре

Предположим, это ваш словарь:

Чтобы преобразовать все дефисы в символы подчеркивания в ключе примера словаря:

ответ дан 15 мар ’18, в 23:03

В случае смены всех ключей сразу. Здесь я забиваю ключи.

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

Замена пробелов в клавишах dict на подчеркивания, Я использую этот простой маршрут .

Или просто dictionary.pop(k) Обратите внимание, что ‘er r’, которая может быть любой строкой, станет новым значением, если ключ отсутствует в словаре, чтобы иметь возможность заменить его, чего здесь не может быть. Аргумент является необязательным, в другом аналогичном коде, где может произойти ошибка KeyError, добавленный arg избегает его и все же может создать новый ключ с этой ошибкой или тем, что вы установили в качестве значения.

.copy () позволяет избежать . изменения размера словаря во время итерации.

.keys () не требуется, k — это каждый ключ, k — это ключ в моей голове.

Что такое однострочный цикл выше?

ответ дан 14 мар ’21, в 07:03

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

Например, если у вас есть ключи-> значения:

нет причин, по которым ты не можешь добавить purple->2 или удалите red->1 и добавить orange->1

ответ дан 10 дек ’10, 07:12

Метод, если кто-то хочет заменить все вхождения ключа в многоуровневом словаре.

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

Пример комплексного решения

Объявите файл json, который содержит нужное отображение

Создайте эту функцию, чтобы отформатировать dict с вашим отображением

Помните о положении поп:
Поместите ключ, который хотите удалить, после pop ()
orig_dict [‘AAAAA’] = orig_dict.pop (‘A’)

ответ дан 29 окт ’20, 21:10

Я написал эту функцию ниже, где вы можете изменить имя текущего имени ключа на новое.

Предполагая, что JSON вы можете вызвать его и переименовать в следующей строке:

Работы С Нами панд у вас может быть что-то вроде этого,

ответ дан 13 мар ’21, в 12:03

Я не видел этого точного ответа:

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

Затем вы можете манипулировать атрибутами объекта, как со словарем:

ответ дан 20 авг.

Я не понимаю, как это связано с вопросом; не могли бы вы уточнить? — апретор

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками python dictionary sequence or задайте свой вопрос.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *