Рубрики
Без рубрики

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

Проблема: учитывая словарь в Python; Как переключать ключи и ценности? Способ 1: Использование метода петли 2: Использование ZIP FunctionMethod 3: Использование карты и обратного функции Method 4: Использование Сводка понимания словаря: Используйте один из следующих методов для переключения между клавишами и значениями в словаре с уникальными значениями. Представьте себе … Как переключать ключи и значения в словаре Python? Прочитайте больше “

Автор оригинала: Francesc Serrano.

Проблема: Учитывая Словарь в питоне; Как переключать ключи и ценности?

  • Метод 1: Использование для петли
  • Метод 2: Использование Zip функция
  • Метод 3: Использование карта и Обратный функции
  • Способ 4: Использование Словарь понимание

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

Представьте себе утром, на рабочем столе, с вашим кофе и ноутбуком перед вами. Вы чувствуете себя расслабленным, удобным, уверены в себе и готовы к другому удивительному дню, делая то, что вы любите больше всего. Чтобы решить проблемы с вашим мозгом и пальцами, используя потенциал, который предлагает вам Python!

Тогда ваш босс прибывает и смотрит в твои глаза, он говорит: «Смотри, у нас есть проблема, и мне нужно, чтобы вы это исправить. У вас есть 1 час, чтобы дать мне решение, которое мы можем реплицироваться для всех файлов, которые у нас есть в компании или Мы все уволены »

Ваш босс хороший человек. Он дает вам этот пример начать с:

# Input 🡪     {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# Output 🡪    {1: 'a', 2: 'b', 3: 'c', 4: 'd'}

В этой статье мы покажем вам четыре метода для достижения этого. Самый питон один – Метод 4 -СО, если вы коротко вовремя, переходите на Метод 4 сразу!

Задний план

Если вы опытный разработчик Python, у вас, вероятно, есть твердое основание всех видов структур данных. Если это так, просто пропустите вперед и пойдем в Метод 1 Отказ С другой стороны, если вы новичок в этой теме, или вы хотите обновить этот тип данных, я приглашаю вас прочитать эти строки ниже. Как разработчик Python, важно получить знания и построить прочную основу в Структуры данных Отказ

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

Но что это в словаре?

Словарь – это структура данных, образованная набором Ключ: значение Пары.

Синтаксис:

{'key1': 'value1', 'key2': 'value2', 'key3': 'value3',}

Это также может быть представлено так для легкого чтения:

{
    'key1': 'value1', 
    'key2': 'value2', 
    'key3': 'value3',
}

Примечание : Последняя запятая после Value3 Это не нужно, действительно. Но я рекомендую вам получить это как привычку и писать это всегда. Это сэкономит ваше время, избегая нежелательных ошибок в вашем будущем чистого кода 🙂.

Ключ может быть любым типом, но что важно, чтобы выделить вот что:

  • Ключ должен быть Уникальный во всем словаре. Если не последний дублированный ключ переопределят определенный предыдущий

Пример словаря с целым числом в качестве ключа:

{1: 100, 2: 200}

Пример словаря с поплавкам в качестве ключа:

{1.0: 100, 2.3: 200}

Пример словаря со строкой в качестве ключа:

{'a': 100, 'b': 200}

Пример словаря с кортежом в качестве ключа:

{(0, 0): 100, (1, 1): 200}
 
#or
 
{('Harry','Potter') : 100, ('Hermione','Granger') : 200}

Примечание : Хотя вы можете использовать поплавок в качестве ключа, это не очень рекомендуется, потому что если вы определяете 1,0 и 1 Последний ключ переопределят первый ключ.

Здесь у вас есть пример:

{ 1.0: 100, 1: 200} 🡪 {1.0: 200}
  • Это должно быть Неизменный Отказ Это означает, что ключ может быть целым числом, поплавок, булевой, строку или даже кортеж Среди прочего, но никогда не Список Или другой словарь, поскольку эти структуры данных являются смежными ( Если вам нужно больше копать об этой концепции, я предлагаю вам прочитать эту статью о подменных или неизменных объектах ).

Способ 1: Использование подхода к циклам

Самое простое решение и типичный, который любой разработчик может сначала обнаружить, будет использовать структуру «для цикла» для выполнения определенной итерации для выполнения задачи.

Python для петли представлен переменной, итерацией и некоторыми утверждениями.

Синтаксис:

for  in :
    

Знание этой структуры, мы могли бы иметь первый допустимый подход к решению:

my_dict = {'a': 1, 'c': 3, 'b': 2, 'd': 4}
new_dict = {}
for k, v in my_dict.items():
    new_dict[v] = k

Выход:

{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

Объяснение:

  1. В приведенном выше коде нам нужно создать Новый экземпляр словаря с использованием выражения {} и назначил его новой переменной под названием new_dict Отказ
new_dict = {}
  1. Затем мы используем «для петли», чтобы повторить ключи и значения словаря.
  1. k, v являются переменными. Ключ и значения
  2. my_dict Является ли структура данных, которая может быть словарь, список или кортеж. В этом случае нам необходимо добавить метод. Items (), который возвращает список пар кортежей (ключ, значение). my_dict.items Возвращает:
    dict_items([('a', 1), ('b', 2), ('c', 3)])
  1. new_dict [v] Является ли утверждение, где мы переключаем значения словаря.

Способ 2: Использование функции ZIP

Другое возможное решение будет использовать Zip функция.

Синтаксис:

zip(*iterables)

Но как это работает?

Ну, Zip Функция возвращает объект, созданный из некоторых итераторов, приведенных в качестве параметров. Эти итераторы могут быть спискими, но они должны иметь одинаковое количество предметов каждый. Это должно обеспечить правильное Присоединяйтесь к между предметами. Здесь вы можете увидеть пример:

#iterable 1 = ['one', 'two', 'three']
#iterable  = [1, 2, 3]
 
zip(['one', 'two', 'three'], [1, 2, 3])
 
#result: [('one', 1), ('two', 2), ('three', 3)]

Таким образом, на данный момент решение для второго метода будет:

my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
 
dict(zip(my_map.values(), my_map.keys()))

Выход:

{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

Объяснение:

Идея этого решения состоит в том, чтобы предоставить на ZIP-функцию 2, фактически 2 списка, в этом случае создать уникальный Список кортежи Отказ Хитрость здесь – использовать ключи в качестве значений и наоборот, используя форму my_dict.values () получить значения и my_dict.keys () Чтобы получить ключи в двух разделенных списках.

my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4}

my_dict.values()
# [1, 2, 3, 4] 

my_dict.keys()
# ['a', 'c', 'c', 'd']
  1. Как только это достигнуто, если мы используем функцию ZIP, у нас будет:
zip(my_map.values(), my_map.keys())
# [(1, 'a'), (2, 'b'), (3, 'c'),  (4, 'd')]
  1. На этом этапе только нам нужно создать словарь с использованием конструктора типа Dict () и получение результата мы искали:
dict(zip(my_map.values(), my_map.keys()))

Способ 3: Использование карты и обратных функций

Третье решение, которое вы можете подумать, использует карта и Обратный Функция вместе с конструктором Dict () Отказ

Но как это работает и как мы используем эти две функции именно? Давайте посмотрим на них оба, чтобы понять это.

Обратная функция:

Функция обратной формы имеет свойство для возврата итератора в обратном порядке приведенной последовательности. Важно отметить, что обратный () Просто принимает последовательности, а не какие-либо другие итераторы. Таким образом, если вы хотите перевернуть итератор, вы должны рассмотреть возможность преобразовать его ранее в список.

Синтаксис:

reversed(seq)

Примеры:

Струнная последовательность:

seq = 'retxnif'

reversed(seq)
# 

list(reversed(seq)) 
# ['f', 'i', 'n', 'x', 't', 'e', 'r']

Последовательность списка:

seq = ['r', 'e', 't', 'x', 'n', 'i', 'f']

reversed(seq)
# 

list(reversed(seq))
# ['f', 'i', 'n', 'x', 't', 'e', 'r'] 

последовательность кортежей:

seq = ('r', 'e', 't', 'x', 'n', 'i', 'f')

reversed(seq)
# 

list(reversed(seq))
# ['f', 'i', 'n', 'x', 't', 'e', 'r']

последовательность диапазона

seq = range(5)
#  [0, 1, 2, 3, 4]

reversed(seq) 
# 

list(reversed(seq))
# [4, 3, 2, 1, 0]

Возможно, если вы прочитали Кофе-брейк Python Slicing Из Криса вы заметили, что последний случай может быть достигнут по Диапазон (5) [:: - 1] Отказ Однако, кажется, из документации, что обратный (SEQ) Быстрее и используют меньше памяти. Так что имейте в виду.

Функция карты

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

Другими словами, это способ обработки повторных документов без необходимости петли.

Синтаксис:

map(function, iterable, ...)
  • Функция : это функция, которая будет применяться к каждому элементу
  • ИТЕРИТЕЛЬНО : это параметр, который будет сопоставлен. Это может быть список, кортеж и т. Д.

Пример:

#transform all the items of a string to a integer
iterable_str = ['1','2','3','4','5']
map(int,iterable_str) 
# [1, 2, 3, 4, 5]
#transform all the items of a string to a float
iterable_str = ['1.0','2.0','3.0','4.0','5.0']
map(float,iterable_str) 
# [1.0, 2.0, 3.0, 4.0, 5.0]
#transform all the items of a string by applying strings methods like capitalize
iterable_str =['finxter','is','an','endless','source','of','knowledge']
list(map(str.capitalize, iterable_str)) 
# ['Finxter', 'Is', 'An', 'Endless', 'Source', 'Of', 'Knowledge']

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

my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
dict(map(reversed, my_dict.items())
# {1: 'a', 2: 'b', 3: 'c', 4: 'd'}

На данный момент вы можете честно думать, что, наконец, у вас есть правильное и самое пифитонное решение, не так ли? Ну нет … так вот это приходит 4 TH Метод предоставить вам больше знаний. Итак, продолжайте читать!

Метод 4: Использование словаря.

Хотя функциональные инструменты программирования, такие как карта () Были очень полезны в прошлом, являющиеся фундаментальными компонентами в Python с более чем 20 лет, в настоящее время есть другие формы, которые становятся все более популярными среди разработчиков Python, как Понимание списка или Словарь понимание Отказ

Как они работают?

Что ж, понимание словаря – это быстрый и краткий способ создать словарь в новую, применяя операцию преобразования для каждого из его членов, если это необходимо. Как вы, возможно, заметили здесь, мы сосредоточены на понимании словаря, однако, если вы заинтересованы в понимании списка, я предлагаю вам прочитать эту отличную статью также в Finxter.

Синтаксис:

Словарь понимание

{ expression + context }

Пример:

my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
pow3_my_dict = {k:v**3 for (k,v) in my_dict.items()} 
# {'a': 1, 'c': 27, 'b': 8, 'd': 64}

Объяснение:

  • Выражение : k: v ** 3 🡪 Это говорит Python, что делать со значениями словаря. В этом случае мы применяем третью силу. Это 1 ^ 3 , 2 ^ 3 , 3 ^ 3 , 4 ^ 3.
  • Контекст : для (k, v) в my_dict.items () 🡪 Это говорит о том, какие элементы словаря будут преобразованы. В этом случае все они. Контекст является произвольным числом для и если.

Пример с помощью утверждения, если

pow3_my_dict = {k:v**3 for (k,v) in my_dict.items() if v < 3} 
# {'a': 1, 'b': 8}

Как вы можете видеть, он создает новый словарь со значениями, где оператор IF верно.

Сказав это, вы можете спросить себя: «Могу ли я создать словарь, используя понимание словаря, не имея предыдущего словаря?» Хотя это немного далеко от темы, которую мы сосредоточены, ответ – это Да Отказ Мы могли бы создать новый словарь, где контекст является утечком, но не обязательно словарь. Мы могли бы использовать диапазон функций для генерации ейтена или даже с использованием данного Список Отказ Давайте посмотрим некоторые примеры:

Функция диапазона:

{num: num*num for num in range(1, 4)} 
# {1: 1, 2: 4, 3: 9}

Список:

Представьте себе, что у вас есть список клиентов, которые некоторые были введены в систему заглавными, строчными или заглавными. И ваша работа – преобразовать их в словарь в нижнем регистре и снова передавать результаты в систему. Это может быть допустимым решением:

customer_list = ['Andrew@test.com', 'RITA@hooli.com', 'anne@TROAT.COM']
print({x.lower() : 1 for x in customer_list})
# {'rita@hooli.com': 1, 'anne@troat.com': 1, 'andrew@test.com': 1}

Итак, возвращаясь из этой скобки, решение для изменения словаря с использованием понимания словаря будет:

my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
{v: k for k,v in my_dict.items()} 
# {1: 'a', 2: 'b', 3: 'c', 4: 'd'}

Объяснение:

Трансформация здесь состоит в том, чтобы изменить заказ Ключ: значение Пары, чтобы иметь Значение: ключ Пары. Итак, что мы говорим Python: «Примените это преобразование v, k (изменить заказ) для каждого элемента (k, v) в словаре дано”.

  • Выражение: V: K.
  • Контекст: для k, v в my_dict.items ()

Вывод

В этой статье мы узнали, как поменять Ключ: значение Пары словаря с использованием:

  • Структура для петля
  • Zip функция
  • карта () и обратный () Функция, как их комбинировать и что такое утекательна.
  • Словарь понимание, а детали, представленные в нем выражением и контекстом

Чтобы объяснить это, мы исследовали, что такое словарь. Какие их свойства такие как неизменность и уникальность ключа. Мы также охватывали то, что произойдет, если мы повторим ключ с другим значением или наоборот, мы используем номер дважды в качестве ключа, хотя один был тип поплавка, а другой был целочисленным типом.

Наконец, мы обнаружили, что понимание словаря становится все более популярным, чем функции, такие как карта () Потому что, если вы не злоупотребляете, это поможет вам сократить количество строк вашего кода, что делает его более чистым, легко понимать, элегантным и больше пифитон. Если вы хотите глубже в этом вопросе, пожалуйста, прочитайте это отличное Статья об понимании словаря.