Разница между картой и dict

Я могу запутаться между hashmap и map/dict в Python.
Я думал, что hash (k / v абстракция) Java-это то же самое, что и dict в Python

но тогда что делает map тип данных do?

это та же абстракция, что и абстракция hashmap? Если да, то чем он отличается от словаря?
Я прошел через документы, но мне потребовалась целая парадигма: функциональное программирование.

5 ответов


карта не является типом данных в python. Он применяет функцию к ряду значений и возвращает результат.

>>> def f(x):
...     return x**2
... 
>>> list(map(f, range(5)))
[0, 1, 4, 9, 16]

часто из-за простого, как, что, чтобы быть "весть" мы использовать списочные включения.

>>> [x**2 for x in range(5)]
[0, 1, 4, 9, 16]

вы правы в своем сравнении хэш-карт и диктов.


в python нет типа данных карты. map-это функция, которая сопоставляет функцию с последовательностью.

def increment(n):
    return n+1
l = [1,2,3]
map(increment, l)

даст вам новый список [2,3,4]


в сущности a Map в Java-это как dict в Python: обе структуры данных создают ассоциации между ключами и значениями с ожидаемой производительностью O(1) для get() и contains() операции.

на Map структуры данных в Java не следует путать с map() функция в Python:

map (функция, iterable,...)

применить функцию к каждому элементу iterable и вернуть список результатов. Если передаются дополнительные итерируемые аргументы, функция должна принимать столько аргументов и применяется к элементам из всех итераций параллельно


В Python 3, map возвращает итеративный тип данных, эквивалентный тому, что возвращается imap itertools в Python 2.

чтобы получить те же результаты в Python 3, что и Нолан роялти Python 2 пример вы бы написать:

>>> def f(x):
...     return x**2
... 
>>> list(map(f, range(5)))

[0, 1, 4, 9, 16]

Если вы не обернете его в список в Python 3, вы получите объект карты:

>>> map(f, range(5))
... <map object at 0x000000000327E780>

так и есть are объекты карты, которые являются итерационными, в Python 3.


ответ Нолена для Python 2.

В Python 3, map является итерабельным типом данных, эквивалентным тому, что возвращается imap itertools в Python 2.

чтобы получить тот же результат, что и первый пример Python 2 выше в Python 3, Вы должны написать:

>>> def f(x):
...     return x**2
... 
>>> list(map(f, range(5)))

[0, 1, 4, 9, 16]