1

笨拙的库是否提供了一种方法来分割给定名称的所有属性,而不管级别如何?我在想这样的事情:

import awkward as ak

obj = {
    'resource_id': 'abc',
    'events': [
        {'resource_id': '123', 'value': 12, 'picks':
            [{'resource_id': 'asd', 'value': 1},
             {'resource_id': 'dll', 'value': 12}
            ]
         },
         {'resource_id': '456', 'value': 12, 'picks':
            [{'resource_id': 'cvf', 'value': 23},
             {'resource_id': 'ggf', 'value': 34},
             ]
         },
    ]
}


ar = ak.from_iter(obj)

rid = ar[..., 'resource_id']

的值rid只是字符串 'abc' 但我期待的更像是以下内容:

[
   ['abc'],
   ['events':[
       [['123'], 'picks':[['asd'], ['dll']]], 
       [['456'], 'picks':[['cvf'], ['ggf']]],
   ]
]       

但是,我仍在努力解决尴尬的数组,这样我就可以完全离开这里了。

4

1 回答 1

2

它没有,我不确定应该如何塑造这种操作的输出。例如,如果你选择 external "resource_id",你会得到

>>> ar["events", "resource_id"]
<Array ['123', '456'] type='2 * string'>

但是如果你选择内部"resource_id",你会得到

>>> ar["events", "picks", "resource_id"]
<Array [['asd', 'dll'], ['cvf', 'ggf']] type='2 * var * string'>

请注意,...确实有含义,但它会切分行(嵌套列表),而不是列(记录字段名称)。

>>> ar["events", "picks", "value"]
<Array [[1, 12], [23, 34]] type='2 * var * int64'>
>>> ar["events", "picks", "value", ..., 0]
<Array [1, 23] type='2 * int64'>

此外,了解您可以使用字符串和字符串列表(嵌套投影)进行投影可能会有所帮助:

>>> print(ar["events", "picks", ["resource_id", "value"]])
[[{resource_id: 'asd', value: 1}, ... {resource_id: 'ggf', value: 34}]]

如果这有助于解决您的切片问题(这可能会在所有级别手动挑选"resource_id"并以对您的数据有意义的方式将它们组合在一起,但可能无法概括)。

于 2021-01-21T20:18:50.400 回答