Python按索引器中一个键的值拆分dict ROR:index 141超出了大小为1的轴0的界限

Python按索引器中一个键的值拆分dict ROR:index 141超出了大小为1的轴0的界限,python,dictionary,split,Python,Dictionary,Split,这个问题是对已经提出的问题的补充: 我有一个有19个键的字典,每个键包含51000个值或观察值的数组。其中一个键是分组/分类键,其值可以是1或2。我想做的是把这本词典分成两本新词典。一个用于分类键为1时,另一个用于分类键为2时 data = {'variable 1': array([ 90, 91, 89, ... . . . 'variable 18': array([0.1, 0.02, 0.4, ...

这个问题是对已经提出的问题的补充:

我有一个有19个键的字典,每个键包含51000个值或观察值的数组。其中一个键是分组/分类键,其值可以是1或2。我想做的是把这本词典分成两本新词典。一个用于分类键为1时,另一个用于分类键为2时

data = {'variable 1': array([ 90, 91, 89, ...
           .
           .
           .
       'variable 18': array([0.1, 0.02, 0.4, ...
       'classifier': array([1, 1, 2, ...
       }
我已经尝试过使用georgesl发布的解决上述问题的方法:

data1 = [ { key : data[key][idx] for key in data.keys() }  for idx, x in enumerate(data["id"]) if x == 1 ]
但是,当我运行此命令时,会出现以下错误:

 IndexError: index 141 is out of bounds for axis 0 with size 1
我还尝试使用以下方法将数组转换为列表:

data2 = {}
for key in data.keys():
     data[key] = data[key].tolist()
但当我在发布的解决方案中运行它时,会产生以下错误:

IndexError: list index out of range

我可能错过了一些非常明显的东西,但我一辈子都想不出是什么。我愿意接受任何建议

我用了不同的,希望你不介意。我相信它是有效的:

from itertools import compress
data2={key:list(compress(data[key],[i-1 for i in data['classifier']])) for key in data.keys()}
data1={key:list(compress(data[key],[i-2 for i in data['classifier']])) for key in data.keys()}
这是我第一次使用,所以我不是专家。总之,它的工作原理就像一个面具,比如:

>>> list(compress(['no','yes'],[False, True]))
给出:

['yes']
还有,如果

data ['classifier'] = [1, 1, 2]
然后

给出:

[0, 0, 1] #evaluates to [False,False,True]
[-1, -1, 0] #evaluates to [True,True,False]

给出:

[0, 0, 1] #evaluates to [False,False,True]
[-1, -1, 0] #evaluates to [True,True,False]
现在,假设您希望在分类器中使用0和1,并且如果分类键为0,则您有数据1,这是您的代码:

data2={key:list(compress(data[key],[i for i in data['classifier']])) for key in data.keys()} # or just data['classifier']
data1={key:list(compress(data[key],[i + anything for i in data['classifier']])) for key in data.keys()}

数据中的数组大小不同。Try:
size=len(数据['classsifier']);assert all(len(a)=数据中a的大小。values())
(它应该产生
AssertionError
这是一个非常优雅的解决方案。我有一个关于I-1和I-2标准的快速跟进问题。如果I-1==0,是否执行条件?如果我将我的分类更改为0和1的范围,我是否应该将I-0和I-1作为条件?