Кто-нибудь работает с Списки данных встретится о необходимости комбинировать их полезным способом. Часто лучший результат – Словарь состоящий из Ключи и Значения Отказ В этой статье вы узнаете, как создать словарь из двух замедленных массивов.
Проблема разработки: Учитывая два объявленных массива А
и B
Отказ Создать словарь, который присваивает ключ [I]
ценить B [I]
Для всех Я
Отказ
Пример : Учитывая два объявленных массива
a = np.array([1, 42, 0]) b = np.array(['Alice', 'Bob', 'Liz'])
Создайте новый словарь программно, который назначает элементы в А
к элементам в B
, элемент-мудрый:
{1: 'Alice', 42: 'Bob', 0: 'Liz'}
После предоставления вам какого-то фона для входного массива Numpy вы узнаете несколько методов для достижения этого.
Фон: Numpy для массива
Numpy это библиотека Python, которая полезна для работы с массивами. Numpy обозначает «Численный питон» Отказ Пользователи Python могут использовать стандартные списки в качестве массивов, но Numpy работает быстрее, потому что элементы массива хранятся в смежной памяти. Это делает его более эффективным для того, чтобы, например, итерацию через массив, а не на необходимости, чтобы схватить в пространство памяти, чтобы найти следующий элемент.
Если у нас есть Python и PiP, уже установленные в наших системах, то установка Numpy легко:
Создание Numpy Array так же просто, как импортировать Numpy Library и вызов Массив ()
функция. Numpy часто импортируется под NP
псевдоним:
import numpy as np planet = np.array(['Mercury', 'Venus', 'Earth', 'Mars']) orbitalPeriod = np.array([88.0, 224.7, 365.2, 687.0])
В отличие от стандартных списков Python, которые могут удерживать разные типы данных в одном списке, массивы Numpy должны быть однородными, все тот же тип данных. В противном случае мы теряем математическую эффективность, встроенную в Numpy Array.
Метод 1: на молнии
Создав две массивы, мы можем использовать Python’s zip ()
Функция слить их в словарь. zip ()
Модуль находится в встроенном пространстве имен Python. Если мы используем dir ()
Для просмотра __Builtins__
Мы находим zip ()
В конце списка:
>>>dir(__builtins__) ['ArithmeticError', 'AssertionError'...,'vars', 'zip']
zip ()
Функция делает итератор, который объединяет элементы из каждой из передовых массивов, как и блокирующие зубы молнии на паре джинсов. На самом деле, zip ()
Функция была названа для физической на молнии.
d = {} for A, B in zip(planet, orbitalPeriod): d[A] = B print(d) # {'Mercury': 88.0, 'Venus': 224.7, 'Earth': 365.2, 'Mars': 687.0}
При использовании zip ()
Функция, нам гарантировано, что элементы останутся в данном порядке влево-правильном порядке. Не нужно беспокоиться о том, что элементы в массивах будут смешаны, поскольку они объединяются в словарь. В противном случае словарь будет бесполезным, так как ключи не будут правильно выровнены со своими значениями.
Способ 2: массивы неравных длин
В некоторых случаях наши массивы могут иметь неравные длины, что означает, что один массив имеет больше элементов, чем другой. Если это так, то используйте zip ()
Функция объединить их приведет к словарю, соответствующее Самый короткий Длина массива. Вот пример самых ярких звезд в кластере Pleiades с их очевидными величинами:
stars = np.array(['Alcyone', 'Atlas', 'Electra', 'Maia', 'Merope', 'Taygeta', 'Pleione']) magnitude = np.array([2.86, 3.62, 3.70, 3.86, 4.17, 4.29]) cluster = {} for A, B in zip(stars, magnitude): cluster[A] = B print(cluster) # {'Alcyone': 2.86, 'Atlas': 3.62, 'Electra': 3.7, 'Maia': 3.86, 'Merope': 4.17, 'Taygeta': 4.29}
Как мы видим, « звезды
«Массив содержит семь сестер, семь самых ярких звезд в кластере Pleiades. « величина
«Массив, однако, перечислил только вершину шесть значения для очевидной величины. Когда zip ()
Функция объединила две массивы, седьмая звезда была полностью удалена.
В зависимости от наших потребностей это может быть приемлемо. Но если нет, то мы можем использовать zip_longest ()
Функция из Itertools
модуль вместо zip ()
функция. С помощью этой функции любые недостающие значения будут заменены на FillValue
аргумент Мы можем вставить любое значение, которое мы хотим, и значение по умолчанию будет Нет
Отказ
Давайте создадим кластер
Словарь снова:
from itertools import zip_longest cluster = {} for A, B in zip_longest(stars, magnitude, fillvalue='?'): cluster[A] = B print(cluster) # {'Alcyone': 2.86, 'Atlas': 3.62, 'Electra': 3.7, 'Maia': 3.86, 'Merope': 4.17, 'Taygeta': 4.29, 'Pleione': '?'}
На этот раз все семь сестров перечислены, и последнее значение неизвестного величины помечено вопросительным знаком, возможно, быть заполненным позже.
Комбинируя память Mempy-Efficial Memory с zip ()
или zip_longest ()
Функции простоты использования в качестве итератора, мы можем быстро и просто создавать словари из двух массивов с минимумом суеты.
Рекомендации
- [1] Numpy: https://numpy.org/
- [2] PIP: https://pypi.org/project/pip/
- [3] Планетарные орбитальные периоды: https://nssdc.gsfc.nasa.gov/planetary/factsheet/
- [4] ZIP () https://docs.cython.org/3/Library/functions.html#zip.
- [4] Встроенные: https://docs.cython.org/3/library/builtins.html.
- [6] Кластер Pleiades: https://en.wikipedia.org/wiki/pleyides.
- [7] zip_longest (): https://docs.cython.org/3.3/Library/itertools.html#itertools.zip_longest.
- [8] Stackoverflow: https://stackoverflow.com/questions/52207358/Create-dictionary-from-two-numpy-rams.