Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用数组中的分组列创建dict,并将其余列分配给dict的值_Python_Arrays_Dictionary - Fatal编程技术网

Python 使用数组中的分组列创建dict,并将其余列分配给dict的值

Python 使用数组中的分组列创建dict,并将其余列分配给dict的值,python,arrays,dictionary,Python,Arrays,Dictionary,我有一个类型(s1)=numpy.ndarray。我想创建一个字典,使用s1的第一列作为键,其余列作为键的值。第一列有重复的值。 这里是np.array s1 = np.array([[1L, 'R', 4], [1L, 'D', 3], [1L, 'I', 10], [1L, 'K', 0.0], [2L, 'R', 11], [2L, 'D', 13], [2L, 'I', 1], [2L, '

我有一个
类型(s1)=numpy.ndarray
。我想创建一个字典,使用
s1
的第一列作为键,其余列作为键的值。第一列有重复的值。 这里是np.array

s1 = np.array([[1L, 'R', 4],
       [1L, 'D', 3],
       [1L, 'I', 10],
       [1L, 'K', 0.0],
       [2L, 'R', 11],
       [2L, 'D', 13],
       [2L, 'I', 1],
       [2L, 'K', 6],
       [3L, 'R', 12],
       [3L, 'D', 17],
       [3L, 'I', 23],
       [3L, 'K', 10]], dtype=object)
我想得到以下信息:

{'1':[['R',4],['D',3],['I',10],['K',0]],
  '2':[['R',11],['D',13],['I',1],['K',6]],
  '3':[['R',12],['D',17],['I',23],['K',10]]}
这就是我尝试和得到的:

In [18]: {x[0]:[x[1],x[2]] for x in s1}
Out[18]: {1L: ['K', 0.0], 2L: ['D', 6], 3L: ['K', 10]}
我看到了分组列具有重复值的问题。但是我不能做附加。我缺少的技巧是什么?

您可能需要使用:

您可能需要使用:


您可以简单地使用以下工具构建它们:

为了

编辑

您可以在dicts中嵌套dicts:

d=collections.defaultdict(dict)
for k1,k2,v in s1 : d[k1][k2]=v 

#defaultdict(dict,
#       {1: {'D': 3, 'I': 10, 'K': 0.0, 'R': 4},
#        2: {'D': 13, 'I': 1, 'K': 6, 'R': 11},
#        3: {'D': 17, 'I': 23, 'K': 10, 'R': 12}})

In [67]: d[2]['K']
Out[67]: 6

请参阅以了解一般性。

您只需使用以下工具构建它们:

为了

编辑

您可以在dicts中嵌套dicts:

d=collections.defaultdict(dict)
for k1,k2,v in s1 : d[k1][k2]=v 

#defaultdict(dict,
#       {1: {'D': 3, 'I': 10, 'K': 0.0, 'R': 4},
#        2: {'D': 13, 'I': 1, 'K': 6, 'R': 11},
#        3: {'D': 17, 'I': 23, 'K': 10, 'R': 12}})

In [67]: d[2]['K']
Out[67]: 6

请参阅以了解一般性。

旁白:您是否已决定使用纯numpy?当您处理异构类型的数据时,列有名称是有意义的,并且您正在重新实现groupby,很难抵制推荐pandas的诱惑。(而我不能)旁白:你是不是已经决定要用纯裸体了?当您处理异构类型的数据时,列有名称是有意义的,并且您正在重新实现groupby,很难抵制推荐pandas的诱惑。(我不能)我如何使
['R',4],'D',3],'I',10],'K',0.0]
部分也像
'R':4,'D':3…
我如何使
['R',4],'D',3],'I',10],'K',0.0]
部分也像
'R':4,'D':3…
defaultdict(list,
            {1: [['R', 4], ['D', 3], ['I', 10], ['K', 0.0]],
             2: [['R', 11], ['D', 13], ['I', 1], ['K', 6]],
             3: [['R', 12], ['D', 17], ['I', 23], ['K', 10]]}) 
d=collections.defaultdict(dict)
for k1,k2,v in s1 : d[k1][k2]=v 

#defaultdict(dict,
#       {1: {'D': 3, 'I': 10, 'K': 0.0, 'R': 4},
#        2: {'D': 13, 'I': 1, 'K': 6, 'R': 11},
#        3: {'D': 17, 'I': 23, 'K': 10, 'R': 12}})

In [67]: d[2]['K']
Out[67]: 6