转换在独特字典中共享相同键的pandas词典列表

时间:2017-03-21 13:19:09

标签: python pandas dictionary

我有一个词典列表:

dict_list = [{'A': [1,2],
              'B': [3,4],
              'C': [5,6]},
             {'A': [7,8],
              'B': [9,10],
              'C': [11,12]}]

哪些键是' A',' B'' C' (关键名称只是一个例子)所有词典(这里2,但它们更多......总是使用相同的词)

如何将此词典列表转换为如下所示的独特词典?

dict_list2 = {'A': np.array([[1,2],[7,8]]),
              'B': np.array([[3,4],[9,10]]),
              'C': np.array([[5,6],[11,12]])}

2 个答案:

答案 0 :(得分:0)

您可以使用词典理解

import numpy as np

dict_list2 = {k:np.array([d[k] for d in dict_list]) for k in dict_list[0]}

我们假设dict_list 至少包含一个词典,并且该词典的所有键都会在词典中重复。换句话说,如果dict_list[0]包含'A',我们假设所有词典都包含'A'键。这似乎是一个合理的假设。

这给出了:

>>> dict_list2
{'C': array([[ 5,  6],
       [11, 12]]), 'A': array([[1, 2],
       [7, 8]]), 'B': array([[ 3,  4],
       [ 9, 10]])}

格式化不是很优雅,这是因为numpy使用新行格式化矩阵,但您可以看到内容是正确的。

答案 1 :(得分:0)

Pandas解决方案 - 使用DataFrame构造函数和to_dict

print (pd.DataFrame(dict_list).to_dict(orient='list'))
{'A': [[1, 2], [7, 8]], 'B': [[3, 4], [9, 10]], 'C': [[5, 6], [11, 12]]}

但如果需要numpy数组,请添加dictionary comprehension

print ({k: np.array(v) for k, v in pd.DataFrame(dict_list).to_dict(orient='list').items()})
{'A': array([[1, 2],
       [7, 8]]), 'B': array([[ 3,  4],
       [ 9, 10]]), 'C': array([[ 5,  6],
       [11, 12]])}