Кто-нибудь работает с Списки данных встретится о необходимости комбинировать их полезным способом. Часто лучший результат – Словарь состоящий из Ключи и Значения Отказ В этой статье вы узнаете, как создать словарь из двух замедленных массивов.
Проблема разработки: Учитывая два объявленных массива А и 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.