循环使用字典值,这是嵌套列表以转换为矩阵

时间:2016-08-02 22:13:36

标签: python loops dictionary matrix list-comprehension

我有以下问题:

我有一本字典,其中每个K,V如下:

k = 1 String

v =以下列方式嵌套列表,

里面的V是多个列表,每个A列表里面都有B个列表,每个B列表里面都有C个条目。

最后,我想做一些平均值和标准偏差的计算,所以我想创建一个字典,其中键是相同的,v如下:

一个A行乘B列的矩阵,其中矩阵中的每个条目都是列表B.这样我就能以这样的方式排列数据,即我可以从矩阵的每一列中删除特定值来做一些计算

这是我的推理,所以我尝试了以下内容:

#Initialzing the new dictionary
matrix_dictionary = {}

for k,v in overall_dictionary.iteritems():
    num_rows = len(v) #Number of rows in desired matrix
    for i in v:
        width = len(i) #Number of columns in desired matrix

    #Initializing the matrix
    data_matrix = [[] for i in xrange(0,width) for j in xrange(0,num_rows)]


    for y in xrange(0,height)#For row in row
        for element in v: #For each list A in v
        counter = 0; #one of indices to add element to specific spot in matrix
        for i in element:#for B list in A
            data_matrix[y][counter] = i #Trying to add list B inside matrix
            counter = counter + 1;

    matrix_dictionary[k] = data_matrix #Adding key value pair to dic

解释问题的不同尝试

对于字典中的每个k,我有一个3D v

例如,v由100个列表(A)组成

每个列表中都有50个列表(B)

每个列表B都有一个列表C,其中C的两个索引是感兴趣的

我想创建一个巨大的表,它是A行B列,所有C列表都在

之内

示例:第一行,第一列有C1,第一行第二列有C2,等等......

我希望矩阵成为字典中的值

我看到了以下错误

1)矩阵的索引错误

2)以下内容可以在外面进行

for k, v in ovarall_dictionary.iteritems():
    for A in v:
        print(A) #Prints the list A containing a bunch of lists B
    for B in A:
        print(B) #Prints each B list

但是,以下不起作用,我的索引超出了列表范围,为什么?

z = v[0]
print(z)

最终目标

对于每个k,v in new matrix dictionary

对于矩阵中的每个列以及该列的每个单元格内 得到两个指数X和Y

得到所有X的平均值,得到所有Y的平均值

创建一个新字典,其中k为字符串,结果列表为值对

需要帮助

我已经解释过我在v内有一个3D数组:A [B [C]]]

我想创建一个AxB矩阵,其中不同的C值可以在矩阵中轻松调用

1 个答案:

答案 0 :(得分:0)

好消息是:你已经拥有了你想要的字典!列表 是一个2D矩阵。

坏消息:你不清楚自己会遇到什么样的错误,以及它们会在哪里出现。更多细节将有助于人们提出解决方案。

与此同时,对您的代码进行了一些评论(尽管我已经有了矩阵,但我认为没有必要):

  • 您在代码中使用高度,但从不初始化它。是高度= num_rows?
  • 不是遍历所有行,每次更新宽度,只需执行一次,如:

    width = len(v[0])  #This assumes all rows have same number of cols
    
  • 不需要分号。 (并不是说他们有什么问题!)

  • 代码中的缩进不清楚。确保一切都在正确的循环中。

  • 你应该拥有'元素'不是'对于元素a'。

  • 我认为反击会使事情复杂化。尝试使用'枚举'或类似的东西。