如何使字典成为值组件或numpy数组

Car*_*.py 0 python arrays dictionary numpy python-2.7

我是一个新的Python 2.7用户.我最近了解了numpy数组,现在我正在学习字典.如果我的语法不正确,请原谅.

假设我们有一本字典:

dict1 = {'Ann': {'dogs': '3', 'cats': '4'},
         'Bob': {'dogs': '5', 'cats': '6'},
         'Chris': {'dogs': '7', 'cats': '8'},
         'Dan': {'dogs': '9', 'cats': '10'}}
Run Code Online (Sandbox Code Playgroud)

键是dogcat,值是每个安,鲍勃,克里斯和丹的数字.

我想反转我的字典的值组件.我知道我可以通过使用转换为列表dict1.values(),然后转换为数组,然后转换回字典,但这似乎很乏味.有没有办法让我的值组件成为一个numpy数组并保持关键组件的方式?

ACh*_*ion 5

如果您只需要将值作为数组,则可以使用它pandas来帮助转换为numpy数组.或者,您可以使用它pandas来满足您的要求.Pandas提供了一个建立在其上的数据分析库(思考程序化电子表格)numpy.

要转换为numpy数组以进行进一步处理:

>>> import pandas as pd
>>> import numpy as np
>>> pd.DataFrame(dict1).T
      cats dogs
Ann      4    3
Bob      6    5
Chris    8    7
Dan     10    9
>>> pd.DataFrame(dict1).T.as_matrix()
array([['4', '3'],
       ['6', '5'],
       ['8', '7'],
       ['10', '9']], dtype=object)
Run Code Online (Sandbox Code Playgroud)

根据注释更新,使用pandas反转所有值:

>>> pd.DataFrame(dict1).applymap(lambda x: 1/float(x))
           Ann       Bob     Chris       Dan
cats  0.250000  0.166667  0.125000  0.100000
dogs  0.333333  0.200000  0.142857  0.111111
Run Code Online (Sandbox Code Playgroud)

或者导致字典:

>>> pd.DataFrame(dict1).applymap(lambda x: 1/float(x)).to_dict()
{'Ann': {'cats': 0.25, 'dogs': 0.33333333333333331},
 'Bob': {'cats': 0.16666666666666666, 'dogs': 0.20000000000000001},
 'Chris': {'cats': 0.125, 'dogs': 0.14285714285714285},
 'Dan': {'cats': 0.10000000000000001, 'dogs': 0.1111111111111111}}
Run Code Online (Sandbox Code Playgroud)