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

Python Как присоединиться к списку словарей в один?

https://youtu.be/bkjyco1hor8 Задача: скажем, у вас есть список словарей: [{‘a’: 0}, {‘b’: 1}, {‘c’: 2}, {‘d ‘: 3}, {‘ E ‘: 4, «A»: 4}] Обратите внимание, как первый и последний словари носят один и тот же ключ «A». Как вы объединяете все эти словари в один словарь, чтобы получить следующую? {‘A’: 4, «B»: 1, «C»: … Python Как присоединиться к списку словарей в один? Читать далее “

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

Проблема : Скажи, у вас есть список словарей:

[{'a': 0}, {'b': 1}, {'c': 2}, {'d': 3}, {'e': 4, 'a': 4}]

Обратите внимание, как первые и последние словари носят один и тот же ключ ‘a’ .

Как вы объединяете все эти словари в один словарь, чтобы получить следующую?

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

Обратите внимание, как значение дубликата ключа ‘a’ Является ли значение последнего и не первого диктации в списке диктов.

Чтобы объединить несколько словарей, самый Pythonic Way – использовать понимание словаря {k: v для x в l для k, v в x.items ()} Первый итерации за все словари в списке л а затем итерации по всему (ключевым, ценным) парам в каждом словаре.

Давайте рассмотрим все доступные варианты в оставшейся статье:

Упражнение : Запустите код, какой метод генерирует другой выход, чем все другие методы?

Метод 1: Словарь понимание с вложенным контекстом

Вы можете использовать словарное понимание {k: v для x в l для k, v в x.items ()} Первый итерации за все словари в списке л а затем итерации по всему (ключевым, ценным) парам в каждом словаре.

  • Создайте новый словарь, используя {...} Обозначение.
  • Перейти на все словари в списке словарей л Используя внешний цикл Для х в л Отказ
  • Перейти через все (ключ, значение) пары в текущем словаре х Используя x.items () Метод, который возвращает передачуемых пар (ключ, значение).
  • Заполните новый словарь с (ключом, значением) пар k: v Используя синтаксис понимания общего словаря {k: v для ...} Отказ
l = [{'a': 0}, {'b': 1}, {'c': 2}, {'d': 3}, {'e': 4, 'a': 4}]

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

Это самый питонический способ объединить несколько словарей в один, и он работает для произвольного количества словарей.

Способ 2: простая вложенная петля

Используйте простой вложенный цикл, чтобы добавить пару каждого (ключа, значение) отдельно к вновь созданному словарю:

  • Создайте новый пустой словарь.
  • Перейти на каждый словарь в списке словарей.
  • Перейти через каждую (ключ, значение) пару в текущем словаре.
  • Добавьте пару (ключ, значение) на новый словарь, возможно, перезаписывающие «старые» клавиши с текущим.
l = [{'a': 0}, {'b': 1}, {'c': 2}, {'d': 3}, {'e': 4, 'a': 4}]

d = {}
for dictionary in l:
    for k, v in dictionary.items():
        d[k] = v

print(d)
{'a': 4, 'b': 1, 'c': 2, 'd': 3, 'e': 4}

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

Это самое проще всего читать для многих новичков, но это намного менее лаконично и меньше питон.

Способ 3: Используйте метод Update ()

Dict.Update (x) Метод обновляет словарь, на котором он называется с кучей новых (ключ, стоимости) пар, приведенных в словаре аргумент х Отказ Метод объединения нескольких словарей прост:

  • Создайте новый пустой словарь.
  • Перейти на каждый словарь в списке словарей.
  • Обновите новый словарь со значениями в текущем словаре.
l = [{'a': 0}, {'b': 1}, {'c': 2}, {'d': 3}, {'e': 4, 'a': 4}]

d = {}
for dictionary in l:
    d.update(dictionary)

print(d)
# {'a': 4, 'b': 1, 'c': 2, 'd': 3, 'e': 4}

Это очень читаемый и эффективный способ, и он короче, чем метод 2.

Метод 4: Словарь распаковки

Применительно к словарю D , двойной оператор звездочки ** D Распаковки все элементы в D во внешний словарь. Вы можете использовать этот метод «Словарь распаковки» в среде (в нашем случае словарь), который способен обрабатывать пары (ключ, значение).

Боковая заметка: иногда он также используется для Аргументы ключевых слов .

l = [{'a': 0}, {'b': 1}, {'c': 2}, {'d': 3}, {'e': 4, 'a': 4}]

d = {**l[0], **l[1], **l[2], **l[3], **l[4]}
print(d)
# {'a': 4, 'b': 1, 'c': 2, 'd': 3, 'e': 4}

Это краткий, эффективный и пифитонический способ объединить несколько словарей. Тем не менее, это не оптимально, потому что вы должны вручную вводить каждую операцию распаковки. Если у словаря есть 100 элементов, это не было бы возможным.

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

Метод 5: Используйте ChainMap с распаковкой

Если вы не довольны одним из этих методов, вы также можете использовать Chainmap Структура данных из Коллекции библиотека.

l = [{'a': 0}, {'b': 1}, {'c': 2}, {'d': 3}, {'e': 4, 'a': 4}]

from collections import ChainMap
d = dict(ChainMap(*l))
print(d)
# {'e': 4, 'a': 0, 'd': 3, 'c': 2, 'b': 1}

Однако это не совсем соответствует нашим спецификациям: пятый словарь в нашей коллекции не перезаписывает пары (ключевых, стоимости) первого словаря. Кроме того, это быстрый способ объединить несколько словарей, и я хотел включить его здесь для получения внимания.

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

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

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

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