python - map::lower_bound() 等同于 python 的 dict 类?

标签 python stl

我正在编写一些代码,要求我获取键的下限(为简单起见,忽略位于集合中最小键下方的键)。

在 C++ 中,使用 std::map(作为最具可比性的数据类型)我会简单地使用 lower_bound() 来返回迭代器。

我的 Pythonfoo 不是那么好,但我猜测(如果 Python 还没有这样做的方法),这将是 lambda 函数的一个很好的用途......

检索给定索引的下限键的 Pythonic 方法是什么?

如果问题太抽象,这就是我实际要做的:

我有一个按日期索引的 Python 字典。我希望能够使用日期来查找字典,并返回与指定键的下限关联的值。

片段如下:

mymap = { datetime.date(2007, 1, 5): 'foo',
          datetime.date(2007, 1, 10): 'foofoo',
          datetime.date(2007, 2, 2): 'foobar',
          datetime.date(2007, 2, 7): 'foobarbar' }

mydate = datetime.date(2007, 1, 7)

# fetch lbound key for mydate from mymap
def mymap_lbound_key(orig):
    pass # return the lbound for the key 

我真的不想遍历键,寻找第一个键 <= provided key,除非没有更好的选择......

最佳答案

Python 的 dict 类没有这个功能;你需要自己写。如果键已经排序,那肯定会很方便,不是吗,这样您就可以对它们进行二进制搜索并避免对它们进行迭代?在这种情况下,我会看一下 blist 包中的 sorteddict 类。 http://pypi.python.org/pypi/blist/

关于python - map::lower_bound() 等同于 python 的 dict 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40231188/

相关文章:

c++ - 如何在C++中比较std::array?

c++ - 像迭代器一样编写 STL

python - 创建要安装的 python rpm

python - Discord.py Bot - `if` 命令和 `async def` 有什么区别?

python - Ctypes:获取指向结构体字段的指针

c++ - 使用数组时的 set_union 问题

Python Twisted 向代理发送事件信号的最佳方式

Python: 'NoneType' 对象不可下标'错误

c++ - 在 C++ 中,如何编写类 ADT——如 std::vector 或 std::stack——将 <> 中的数据类型作为参数并相应地构造对象?

c++ - std::copy 和容器的复制构造函数之间是否存在任何性能差异?