【问题标题】:Difference between map and dictmap和dict的区别
【发布时间】:2012-04-21 10:08:35
【问题描述】:

我可能会混淆 Java 中的 hashmap 和 Python 中的 map/dict
我认为Java的hash(k/v抽象)有点像Python中的dict

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

它和 hashmap 抽象是同一个抽象吗?如果是这样,那么它与字典有什么不同?
我浏览了文档,但它把我带到了不同的范式:函数式编程。

【问题讨论】:

  • 您的问题有点不清楚,但对于 Python,这可能是您要查找的文档:docs.python.org/library/stdtypes.html#mapping-types-dict
  • 回答标题中的问题,都是一样的。被视为数据结构的映射与dict 的概念相同。 dicts 还使用哈希将键映射到值。这就是为什么 java 开发者称它为 hashmap。

标签: python map hashmap


【解决方案1】:

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]

您在比较 hashmap 和 dicts 时是对的。

【讨论】:

【解决方案2】:

本质上,Java 中的 Map 类似于 Python 中的 dict:两种数据结构都在键和值之间创建关联,get()contains() 操作的预期性能为 O(1)。

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

map(函数,可迭代,...)

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

【讨论】:

【解决方案3】:

Nolen's answer 用于 Python 2。

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

要在 Python 3 中获得与上面第一个 Python 2 示例相同的结果,您可以编写:

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

[0, 1, 4, 9, 16]

【讨论】:

    【解决方案4】:

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

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

    会给你一个新的列表[2,3,4]

    【讨论】:

      【解决方案5】:

      在 Python 3 中,map 返回一个可迭代的数据类型,相当于 Python 2 中 itertools 的 imap 返回的数据类型。

      要在 Python 3 中获得与 Nolan Royalty's 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 中有个可迭代的地图对象。

      【讨论】:

        猜你喜欢
        • 2018-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-26
        • 2016-05-10
        • 2017-08-08
        • 2011-02-14
        • 2016-03-26
        相关资源
        最近更新 更多