加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 从动态字典创建一个矩阵

发布时间:2020-12-20 11:30:59 所属栏目:Python 来源:网络整理
导读:我想创建一个矩阵. 输入: data = [ {'a': 2,'g': 1},{'p': 3,'a': 5,'cat': 4} ...] 输出: a p cat g1st 2 0 0 12nd 5 3 4 0 这是我的代码.但是,当数据量巨大时,我认为它并不聪明且非常慢. 有什么好方法可以做到这一点吗? 谢谢. data = [ {'a': 2,'cat':
我想创建一个矩阵.

输入:

data = [
    {'a': 2,'g': 1},{'p': 3,'a': 5,'cat': 4}
    ...
]

输出:

a  p  cat  g
1st  2  0  0    1
2nd  5  3  4    0

这是我的代码.但是,当数据量巨大时,我认为它并不聪明且非常慢.

有什么好方法可以做到这一点吗?

谢谢.

data = [
    {'a': 2,'cat': 4}
]

### Get keyword map ###
key_map = set()
for row in data:
    key_map = key_map.union(set(row.keys()))

key_map = list(key_map)    # ['a','p','g','cat']

### Create matrix ###
result = []
for row in data:
    matrix = [0] * len(key_map)
    for k,v in row.iteritems():
        matrix[key_map.index(k)] = v
    result.append(matrix)

print result        

# [[2,1],[5,3,4,0]]

编辑

通过@wwii建议.使用Pandas看起来不错:

from pandas import DataFrame

result = DataFrame(data,index=range(len(data)))
print result.fillna(0,downcast=int).as_matrix().tolist()
# [[2,1,0],3]]

解决方法

我使用Pandas数据帧得到了第二个答案.但是,我的代码应该比你的代码简单一些.

In [1]: import pandas as pd

In [5]: data = [{'a': 2,'cat': 4}]

In [6]: df = pd.DataFrame(data)

In [7]: df
Out[7]: 
   a  cat   g   p
0  2  NaN   1 NaN
1  5    4 NaN   3

In [9]: df = df.fillna(0)

In [10]: df
Out[10]: 
   a  cat  g  p
0  2    0  1  0
1  5    4  0  3

我在iPython中编写了我的编码,我强烈推荐!

要保存到csv,只需使用额外的代码行:

df.to_csv('filename.csv')

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读