首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字典转换为方阵

将字典转换为方阵
EN

Stack Overflow用户
提问于 2016-08-24 01:34:06
回答 2查看 2.3K关注 0票数 2

我想学习如何把字典转换成方阵。根据我所读到的,我可能需要将它转换成一个numpy数组,然后再重新塑造它。我不想使用改型,因为我希望能够根据用户输入的信息来做这件事。换句话说,不管用户输入了多少个所有者和品种,我都想要一个代码来给出一个方阵。

注:本词典的所有者和品种因用户输入而异。用户可以输入100个名称和50个品种,也可以输入4个名称和5个品种。在这个例子中,我做了四个名字和三个狗。

代码语言:javascript
复制
dict1 = 
{'Bob VS Sarah': {'shepherd': 1,'collie': 5,'poodle': 8},
'Bob VS Ann': {'shepherd': 3,'collie': 2,'poodle': 1},
'Bob VS Jen': {'shepherd': 3,'collie': 2,'poodle': 2},
'Sarah VS Bob': {'shepherd': 3,'collie': 2,'poodle': 4},
'Sarah VS Ann': {'shepherd': 4,'collie': 6,'poodle': 3},
'Sarah VS Jen': {'shepherd': 1,'collie': 5,'poodle': 8},
'Jen VS Bob': {'shepherd': 4,'collie': 8,'poodle': 1},
'Jen VS Sarah': {'shepherd': 7,'collie': 9,'poodle': 2},
'Jen VS Ann': {'shepherd': 3,'collie': 7,'poodle': 2},
'Ann VS Bob': {'shepherd': 6,'collie': 2,'poodle': 5},
'Ann VS Sarah': {'shepherd': 0,'collie': 2,'poodle': 4},
'Ann VS Jen': {'shepherd': 2,'collie': 8,'poodle': 2},
'Bob VS Bob': {'shepherd': 3,'collie': 2,'poodle': 2},
'Sarah VS Sarah': {'shepherd': 3,'collie': 2,'poodle': 2},
'Ann VS Ann': {'shepherd': 13,'collie': 2,'poodle': 4},
'Jen VS Jen': {'shepherd': 9,'collie': 7,'poodle': 2}}

例如,我想要一个4x4矩阵(同样,用户可以输入任意数量的狗品种,所以3个品种不是一个限制),因为有四个主人。

我很抱歉没有提前完成我想要的结果,通常我会这样做。我为自己制作dict1而感到自豪:)。因此,字典应该是类似于下面的形式,但我不知道如何合并不同的品种。对我来说最困难的是,我只需要一个矩阵。我还计划使用矩阵求解器numpy,因此我想知道如何从字典中获得方阵。

代码语言:javascript
复制
      Bob      Sarah     Ann     Jen
Bob

Sarah

Ann

Jen
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-24 02:12:21

如果您可以以这种格式获取数据

代码语言:javascript
复制
{name1: {name1:data, name2:data, name3:data, ...}, 
 name2: {name1:data, name2:data, name3:data, ...},
 ...
}

然后你可以把它交给熊猫DataFrame,它会给你做的。位置row = name1 and col = name2处的数据将是name1 vs name2的值。下面是执行此操作的代码:

代码语言:javascript
复制
from collections import defaultdict
import pandas

result = defaultdict(dict)
for key,value in dict1.items():
     names = key.split()
     name1 = names[0]
     name2 = names[2]    
     result[name1][name2] = value

df = pandas.DataFrame(result).transpose()
print(df)

这提供了以下输出:

代码语言:javascript
复制
                              Ann                                  Bob                                        Jen                                      Sarah
Ann    {'shepherd': 13, 'collie': 2, 'poodle': 4}  {'shepherd': 6, 'collie': 2, 'poodle': 5}  {'shepherd': 2, 'collie': 8, 'poodle': 2}  {'shepherd': 0, 'collie': 2, 'poodle': 4}
Bob     {'shepherd': 3, 'collie': 2, 'poodle': 1}  {'shepherd': 3, 'collie': 2, 'poodle': 2}  {'shepherd': 3, 'collie': 2, 'poodle': 2}  {'shepherd': 1, 'collie': 5, 'poodle': 8}
Jen     {'shepherd': 3, 'collie': 7, 'poodle': 2}  {'shepherd': 4, 'collie': 8, 'poodle': 1}  {'shepherd': 9, 'collie': 7, 'poodle': 2}  {'shepherd': 7, 'collie': 9, 'poodle': 2}
Sarah   {'shepherd': 4, 'collie': 6, 'poodle': 3}  {'shepherd': 3, 'collie': 2, 'poodle': 4}  {'shepherd': 1, 'collie': 5, 'poodle': 8}  {'shepherd': 3, 'collie': 2, 'poodle': 2}

向numpy数组的简单转换如下所示:

代码语言:javascript
复制
numpy_array = df.as_matrix()
print(numpy_array)

[[{'shepherd': 13, 'collie': 2, 'poodle': 4}
  {'shepherd': 6, 'collie': 2, 'poodle': 5}
  {'shepherd': 2, 'collie': 8, 'poodle': 2}
  {'shepherd': 0, 'collie': 2, 'poodle': 4}]
 [{'shepherd': 3, 'collie': 2, 'poodle': 1}
  {'shepherd': 3, 'collie': 2, 'poodle': 2}
  {'shepherd': 3, 'collie': 2, 'poodle': 2}
  {'shepherd': 1, 'collie': 5, 'poodle': 8}]
 [{'shepherd': 3, 'collie': 7, 'poodle': 2}
  {'shepherd': 4, 'collie': 8, 'poodle': 1}
  {'shepherd': 9, 'collie': 7, 'poodle': 2}
  {'shepherd': 7, 'collie': 9, 'poodle': 2}]
 [{'shepherd': 4, 'collie': 6, 'poodle': 3}
  {'shepherd': 3, 'collie': 2, 'poodle': 4}
  {'shepherd': 1, 'collie': 5, 'poodle': 8}
  {'shepherd': 3, 'collie': 2, 'poodle': 2}]]
票数 4
EN

Stack Overflow用户

发布于 2016-08-24 02:07:19

您可以通过生成嵌套字典来实现这一点,如:

代码语言:javascript
复制
{'Bob':   {'Bob': .., 'Sarah': .., 'Ann': .., 'Jen':..}
 'Sarah': {.. .. ..},
 'Ann':   {.. .. ..},
 'Jen':   {.. .. ..},
 }

下面是示例代码:

代码语言:javascript
复制
>>> my_dict = {'Bob VS Sarah': {'shepherd': 1,'collie': 5,'poodle': 8},
... 'Bob VS Ann': {'shepherd': 3,'collie': 2,'poodle': 1},
... 'Bob VS Jen': {'shepherd': 3,'collie': 2,'poodle': 2},
... 'Sarah VS Bob': {'shepherd': 3,'collie': 2,'poodle': 4},
... 'Sarah VS Ann': {'shepherd': 4,'collie': 6,'poodle': 3},
... 'Sarah VS Jen': {'shepherd': 1,'collie': 5,'poodle': 8},
... 'Jen VS Bob': {'shepherd': 4,'collie': 8,'poodle': 1},
... 'Jen VS Sarah': {'shepherd': 7,'collie': 9,'poodle': 2},
... 'Jen VS Ann': {'shepherd': 3,'collie': 7,'poodle': 2},
... 'Ann VS Bob': {'shepherd': 6,'collie': 2,'poodle': 5},
... 'Ann VS Sarah': {'shepherd': 0,'collie': 2,'poodle': 4},
... 'Ann VS Jen': {'shepherd': 2,'collie': 8,'poodle': 2},
... 'Bob VS Bob': {'shepherd': 3,'collie': 2,'poodle': 2},
... 'Sarah VS Sarah': {'shepherd': 3,'collie': 2,'poodle': 2},
... 'Ann VS Ann': {'shepherd': 13,'collie': 2,'poodle': 4},
... 'Jen VS Jen': {'shepherd': 9,'collie': 7,'poodle': 2}}
>>> new_dict = {}
>>> for key, value in my_dict.iteritems():
...     first_name, second_name = map(lambda x: x.strip(), key.split('VS'))
...     if first_name not in new_dict:
...         new_dict[first_name] = {}
...     new_dict[first_name][second_name] = value
... 
>>> new_dict
{'Sarah': {'Sarah': {'shepherd': 3, 'collie': 2, 'poodle': 2}, 
            'Ann': {'shepherd': 4, 'collie': 6, 'poodle': 3}, 
            'Jen': {'shepherd': 1, 'collie': 5, 'poodle': 8}, 
            'Bob': {'shepherd': 3, 'collie': 2, 'poodle': 4}
          }, 
 'Bob':   {'Sarah': {'shepherd': 1, 'collie': 5, 'poodle': 8}, 
           'Bob': {'shepherd': 3, 'collie': 2, 'poodle': 2}, 
           'Jen': {'shepherd': 3, 'collie': 2, 'poodle': 2}, 
           'Ann': {'shepherd': 3, 'collie': 2, 'poodle': 1}}, 
 'Jen':   {'Sarah': {'shepherd': 7, 'collie': 9, 'poodle': 2}, 
           'Bob': {'shepherd': 4, 'collie': 8, 'poodle': 1}, 
           'Jen': {'shepherd': 9, 'collie': 7, 'poodle': 2}, 
           'Ann': {'shepherd': 3, 'collie': 7, 'poodle': 2}
          }, 
 'Ann': {'Sarah': {'shepherd': 0, 'collie': 2, 'poodle': 4}, 
                   'Bob': {'shepherd': 6, 'collie': 2, 'poodle': 5}, 
                   'Jen': {'shepherd': 2, 'collie': 8, 'poodle': 2},                   
                   'Ann': {'shepherd': 13, 'collie': 2, 'poodle': 4}
        }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39113110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档