如何迭代(键,值)boost::python:dict

2023-12-09

我怎样才能迭代C++在我的升压::python:字典? 我需要key and value在每个循环中。

我的尝试是这样的:

for (auto x : MyBoostPythonDict.iteritems())
{
    // determine key
    // determine value 
    // ...
}

我收到这个错误:C3312 找不到类型“boost::python::api::object”的可调用“end”函数


Boost Python 在“stl_iterator”标头中公开了一些 STL 迭代器包装器,可让您从begin to end就像普通的 C++ 迭代一样:

https://www.boost.org/doc/libs/1_75_0/libs/python/doc/html/reference/high_level_components/boost_python_stl_iterator_hpp.html

对于 Python 版本 2,您可以使用d.items() or d.iteritems()取决于您是否想要惰性迭代。对于 Python 版本 3 有一个小问题 - 你会预料到items做一个懒人dict视图,但 Boost Python 将其转换为列表。因此,我打电话给.attr("items")()相反,绕过构建内转换,从而获得惰性包装器。我将此对象返回给 Python 只是为了确认它是视图而不是列表。

Calling stl_input_iterator<tuple>()为您提供一个 (Python) 元组对象的迭代器,您可以从中提取键和值。

#include <boost/python/dict.hpp>
#include <boost/python/tuple.hpp>
#include <boost/python/stl_iterator.hpp>
#include <boost/python/extract.hpp>
#include <boost/python/str.hpp>
#include <boost/python.hpp>

#include <iostream>

using namespace boost::python;

object print_dict_to_cout(dict d) {
    auto items = d.attr("items")(); // just plain d.items or d.iteritems for Python 2!
    for (auto it = stl_input_iterator<tuple>(items); it != stl_input_iterator<tuple>(); ++it) {
        tuple kv = *it;
        auto key = kv[0];
        auto value = kv[1];
        std::cout << extract<const char*>(str(key)) << " : " << extract<const char*>(str(value)) << std::endl;
    }
    return items;
}

BOOST_PYTHON_MODULE(iterdict)
{
    def("print_dict_to_cout", print_dict_to_cout);
}

这样做的优点是它很懒,并且不会创建中间列表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何迭代(键,值)boost::python:dict 的相关文章

  • `pyqt5'错误`元数据生成失败`

    我正在尝试安装pyqt5使用带有 M1 芯片和 Python 3 9 12 的 mac 操作系统 我怀疑M1芯片可能是原因 我收到一个错误metadata generation failed 最小工作示例 directly in the t
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • 组合框项目为空但数据源已满

    将列表绑定到组合框后 其 dataSource Count 为 5 但组合框项目计数为 0 怎么会这样 我习惯了 Web 编程 而且这是在 Windows 窗体中进行的 所以不行combo DataBind 方法存在 这里的问题是 我试图以
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • Python对象初始化性能

    我只是做了一些快速的性能测试 我注意到一般情况下初始化列表比显式初始化列表慢大约四到六倍 这些可能是错误的术语 我不确定这里的行话 例如 gt gt gt import timeit gt gt gt print timeit timeit
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • 导入错误:无法导入名称“时间戳”

    我使用以下代码在 python 3 6 3 中成功安装了 ggplot conda install c conda forge ggplot 但是当我使用下面的代码将其导入笔记本时 出现错误 from ggplot import Impor
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 是否有一个 C++ 库可以从 PDF 文件中提取文本,例如 PDFBox for Java? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 去年 我使用 PDFBox 在 Java 中创建了一个应用程序来获取某些 PDF 文件中的原始文本 现在
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 如何检测 C# 中该字典键是否存在?

    我正在使用 Exchange Web 服务托管 API 和联系人数据 我有以下代码 即功能性的 但并不理想 foreach Contact c in contactList string openItemUrl https service
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 计算互相关函数?

    In R 我在用ccf or acf计算成对互相关函数 以便我可以找出哪个移位给我带来最大值 从它的外观来看 R给我一个标准化的值序列 Python 的 scipy 中是否有类似的东西 或者我应该使用fft模块 目前 我正在这样做 xcor
  • bs4 `next_sibling` VS `find_next_sibling`

    我在使用时遇到困难next sibling 并且类似地与next element 如果用作属性 我不会得到任何返回 但如果用作find next sibling or find next 然后就可以了 来自doc https www cru
  • python 中的 after() 与 update()

    我是 python 新手 开始使用 tkinter 作为画布 到目前为止 我使用 update 来更新我的画布 但还有一个 after 方法 谁能给我解释一下这个函数 请举个例子 两者之间有什么区别 root after integer c

随机推荐

  • 使用spark-csv写入单个CSV文件

    我在用https github com databricks spark csv 我试图编写一个 CSV 但无法 它正在创建一个文件夹 需要一个 Scala 函数 它将接受路径和文件名等参数并写入该 CSV 文件 它正在创建一个包含多个文件
  • 如何在 React Native 中设置默认字体系列?

    React Native 中是否有与此 CSS 等效的内容 以便应用程序在任何地方都使用相同的字体 body font family Open Sans 在每个文本节点上手动应用它似乎过于复杂 推荐的方法是创建您自己的组件 例如 MyApp
  • 单例模式性能问题

    我正在审查一段现有的代码 它使用了大量的单例类和访问 我正在努力提高这段代码的性能 我想到的一件事是优化 Singleton getInstance 代码 我倾向于将其替换为具有两次调用的结构 而不是使用 Singleton getInst
  • 可执行加密检查防盗版措施

    我读了一篇非常有趣的博客 内容是关于在您的应用程序中实施一些反盗版保护 其中一些不再工作 另一些则可以 最后列出的 2 个在一定程度上仍然有效 http shmoopi wordpress com 2011 06 19 27 我感兴趣的是最
  • 无需 JavaScript 即可选择性地设置后备字体样式?

    我见过几种使用 JavaScript 设置后备字体样式的方法 例如 Google 和 Typekit 开发的一款 但我很好奇是否有任何方法可以在不使用 JavaScript 的情况下做到这一点 例如 我想使用 Arialheight 10p
  • 应用浮动时的 css 显示属性

    当元素浮动时 不同的显示属性如何影响布局 或者 这些类之间有什么区别 如果有的话 div foo display block float left div foo2 display inline float left div foo3 di
  • Python 3.7.0 Heroku 构建包问题

    我读过一些有同样问题的人 但没有任何建议有效 我正在尝试将一个愚蠢的项目部署到 Heroku 但没有任何效果 在此行下方您可以看到以下消息 写入对象 100 100 100 55 42 MiB 625 00 KiB s 完成 总共 100
  • 放大图像时控制平移(锚定点)

    我正在编写一个简单的图像查看器 并实现平移和缩放功能 分别使用鼠标拖动和鼠标滚轮滚动 我已经成功实现了平移 简单模式 和天真的 进入左上角 zoom 我现在想细化缩放 以便缩放时用户鼠标的坐标成为 焦点 也就是说 缩放时 平移会更新 以便用
  • Google Drive API:如何在 appDataFolder 中创建文件?

    我正在阅读这个文档 https developers google com drive api v3 appdata 这是我的代码 var fileMetadata name config json parents appDataFolde
  • 如何允许列表append()方法返回新列表

    我想做这样的事情 myList 10 20 30 yourList myList append 40 不幸的是 列表追加不会返回修改后的列表 那么 我怎样才能允许append返回新列表 See also Why do these list
  • 不使用 coreLocation 框架的 iPhone 位置

    我需要在不使用 coreLocation 框架的情况下获取 iphone 位置 有没有什么解决办法呢 等待你的回复 提前致谢 使用私有 API 和lot努力程度 是的 在实践中 没有
  • 如何通过 pandas 0.19.2 中其他行的唯一对来标记行

    我有一个数据框df像这样但更大 ID 0 ID 1 location 0 a b 1 1 a c 1 2 a b 0 3 d c 0 4 a c 0 5 a c 1 我想添加一个列来标识前两个 例如 ID 0 ID 1 location g
  • 如何使用锚标记下载文件

    为什么这不起作用 下载 html a href jsplogin jar download a The jsplogin jar文件位于同一文件夹中download html file 当我单击下载链接时jsplogin jar应该下载 但
  • Google 电子钱包服务器是否会对每次订阅续订进行回调?

    我有一个使用订阅 API 的钱包集成 Web 产品 如 中所述文档 模拟了首次付款和取消 一切正常 Google 电子钱包服务器是否会在每次定期续订时调用服务器 显然客户端当时可能不在线 定期付款自动发生 无需回调至商家服务器 处理定期付款
  • 设置 UILabel 行距

    如何修改多行中的行间距 行距 UILabel Edit 显然NSAttributedString在 iOS 6 及更高版本上可以做到这一点 而不是使用NSString要设置标签的文本 请创建一个NSAttributedString 为其设置
  • 将自定义对象从 JList 拖放到 JLabel 中

    我有一个包含自定义对象 ArrayList 的 JList 并且我正在尝试创建拖放到字段中的操作 我无法理解如何打包和接收 Transferable 中的对象 据我所知 这大约是 import java awt import java aw
  • 计算 SQL Server 中不包括重叠时间和中断的总时间

    从选择查询的开始时间和结束时间列表中 我需要找出不包括重叠时间和休息时间的总时间 StartTime EndTime 2014 10 01 10 30 00 000 2014 10 01 12 00 00 000 90 mins 2014
  • 来自多个变量的 Pivot_wider 函数(tidyr r 包)

    我想将数据框置于宽格式中 考虑两个变量作为标准 甚至可能是不必要的 但我对此发表评论是因为原始 df 是 480 行和几个子级别 这是返回一个错误 library tidyr library dplyr df lt structure li
  • 如何在 JavaFX css 中将 -fx-max-width 设置为 USE_PREF_SIZE?

    我正在编写一个 JavaFX 8 应用程序 想知道是否可以将 例如 按钮的最小或最大宽度设置为USE PREF SIZE通过CSS 班上Region定义USE PREF SIZE as Double NEGATIVE INFINITY 但是
  • 如何迭代(键,值)boost::python:dict

    我怎样才能迭代C 在我的升压 python 字典 我需要key and value在每个循环中 我的尝试是这样的 for auto x MyBoostPythonDict iteritems determine key determine