我需要循环遍历已排序的数据集,将该排序属性的所有结果分组为块,这些块对于该属性都具有相同的值.然后我在那块结果上运行一些操作.
对不起,这有点令人困惑,示例可能是描述我正在做的更好的方式:
我有一个像这样结构化的数据集,除了"数据"字符串实际上是对象并包含大量其他数据.
[ [1, "data1"], [1, "data2"], [2, "moredata"], [2, "stuff"],
[2, "things"], [2, "foo"], [3, "bar"], [4, "baz"] ]
Run Code Online (Sandbox Code Playgroud)
我想要发生的是将数据分组为4个不同的函数调用:
process_data(1, ["data1", "data2"])
process_data(2, ["moredata", "stuff", "things", "foo"])
process_data(3, ["bar"])
process_data(4, ["baz"])
Run Code Online (Sandbox Code Playgroud)
我最终得到的结构看起来像这样:
last_id = None
grouped_data = []
for row in dataset:
id = row[0]
data = row[1]
if last_id != id:
# we're starting a new group, process the last group
processs_data(last_id, grouped_data)
grouped_data = []
last_id = id
grouped_data.append(data)
if grouped_data:
# we're done the …
Run Code Online (Sandbox Code Playgroud) 我正在尝试升级一个小型C模块以使其与Python 3.x兼容,并且无法使其编译。我现在的障碍是预处理器定义了我应该用来检查Python版本是否正常的代码。
目前,该模块包含两个.c文件(我暂时将其余文件注释掉了)。在这两个文件中,PY_MAJOR_VERSION均未定义,因此编译器无法在需要的地方使用特定于Python 3.x的定义。
mymodule.c:
#ifndef PY_MAJOR_VERSION
#error Major version not defined!
#endif
#if PY_MAJOR_VERSION >= 3
#define PY3K
#endif
#include "Python.h"
#include "myobj.h"
/* omitted: irrelevant boilerplate structs */
PyMODINIT_FUNC
initmymodule(void)
{
PyObject* m;
#ifdef PY3K
m = PyModule_Create(&mymodule_struct);
#else
(void) Py_InitModule("mymodule", MyModMethods);
m = Py_InitModule3("mymodule", NULL,
"My Module");
#endif
/* omitted: the rest of the module init code */
}
Run Code Online (Sandbox Code Playgroud)
myobj.c:
#ifndef PY_MAJOR_VERSION
#error Major version not defined!
#endif
#if PY_MAJOR_VERSION >= 3
#define PY3K
#endif
#include "Python.h" …
Run Code Online (Sandbox Code Playgroud)