地图和字典之间的区别

时间:2012-04-08 20:47:35

标签: python map hashmap

我可能会对Java中的hashmap和Python中的map / dict感到困惑。
我认为Java的hash(k / v抽象)与Python中的dict相同

但是map数据类型的作用是什么?

它与hashmap抽象是一样的抽象吗?如果是这样,那么它与字典有什么不同呢? 我浏览了文档,但它让我把不同的范例整合在一起:函数式编程。

5 个答案:

答案 0 :(得分:19)

Map不是python中的数据类型。它将函数应用于一系列值并返回结果。

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

通常对于像“pythonic”这样的简单案例,我们使用列表推导。

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

你正好比较了hashmaps和dicts。

答案 1 :(得分:3)

本质上,Java中的Map就像Python中的dict:两个数据结构都创建了键和值之间的关联,get()和{的预期O(1)性能{1}}操作。

Java中的contains()数据结构不应与Python中的map()函数混淆:

  

map(function,iterable,...)

     

将函数应用于iterable的每个项目并返回结果列表。如果传递了额外的可迭代参数,则函数必须采用那么多参数并且并行地应用于所有迭代的项目

答案 2 :(得分:2)

python中没有地图数据类型。 map是一个将函数映射到序列的函数。

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

会给你一个新的清单[2,3,4]

答案 3 :(得分:1)

Nolen's answer适用于Python 2。

在Python 3中,map是一种可迭代的数据类型,等效于itertools的imap在Python 2中返回的数据。

要获得与上述Python 3中第一个Python 2示例相同的结果,请编写:

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

[0, 1, 4, 9, 16]

答案 4 :(得分:0)

在Python 3 中,map返回一个iteratable数据类型,等同于Python 2中itertools的imap返回的数据类型。

要在Python 3中获得与{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>

所以可以在Python 3中迭代的地图对象。