我有type(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]}
我看到分组列有重复值的问题。但我无法做到追加。我错过了什么诀窍?
答案 0 :(得分:2)
您只需使用defaultdict
val dataset = spark
.read
.format("parquet")
.option("basePath", hdfsInputBasePath)
.load(hdfsInputPath)
的
d=collections.defaultdict(list)
for k,*v in s1 : d[k].append(list(v))
修改强>
您可以在dicts中嵌套dicts:
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]]})
请参阅here进行概括。
答案 1 :(得分:1)
您可能想要使用itertools.groupby()
:
In [15]: {k: [list(x[1:]) for x in g]
....: for k,g in itertools.groupby(s1, key=lambda x: x[0])}
Out[15]:
{1L: [['R', 4], ['D', 3], ['I', 10], ['K', 0.0]],
2L: [['R', 11], ['D', 13], ['I', 1], ['K', 6]],
3L: [['R', 12], ['D', 17], ['I', 23], ['K', 10]]}