2016-08-02 33 views
-1

I folgendes Problem:über Wörterbuch Werte Looping, die Listen verschachtelt sind, in Matrizen konvertieren

ein Wörterbuch haben, wobei jedes K, V wie folgt:

k = 1 String

v = verschachtelte Listen in der folgenden Art und Weise,

innerhalb V sind Eine Anzahl von Listen, in jeder A-Liste gibt es B-Nummern von Listen, in jeder B-Liste gibt es C-Einträge.

Schließlich möchte ich einige Berechnungen von Mittelwerten und Standardabweichungen zu tun, so dass ich ein Wörterbuch erstellen möchte, wo der Schlüssel gleich ist und die V ist wie folgt:

einer Matrix aus Zeilen, die von B Spalten, wobei jeder Eintrag in der Matrix die Liste B ist. Dies würde es mir ermöglichen, die Daten so anzuordnen, dass ich bestimmte Werte aus jeder Spalte der Matrix entfernen könnte, um einige Berechnungen durchzuführen.

Das war meine Argumentation, so habe ich folgendes versucht: Problem für jedes k im Wörterbuch

zu erklären

#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 

Verschiedene Versuch habe ich eine 3D v

v besteht beispielsweise aus 100 Listen (A)

Jede Liste hat 50 Listen (B) darin

Jede Liste B hat eine Liste C, wo zwei Indizes von C von Interesse sind

ich eine riesige Tabelle erstellen möchten, die eine Reihen von B-Säulen und alle C-Listen sind innerhalb

Beispiel: erste Reihe, erste Spalte C1 hat, erste Reihe zweite Spalte C2, etc ...

I die Matrix soll der Wert in dem Wörterbuch, um dann seine

ich sah die folgenden Fehler

1) Index-Fehler für die Matrix

2) Folgende Arbeiten außerhalb auf eigene

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 

Allerdings ist die folgende nicht funktioniert, ich Index für die Liste außerhalb des zulässigen Bereichs, warum?

z = v[0] 
print(z) 

Strebt

für jedes k, v in neue Matrix Wörterbuch

für jede Spalte in der Matrix und in jeder Zelle für diese Spalte erhalten zwei Indices X und Y

Erhalten Sie den Durchschnitt aller X, erhalten Sie den Durchschnitt aller Y

Ma ke ein neues Wörterbuch mit k als String und die Liste der Ergebnisse als Wertepaare

benötigt Hilfe auf

ich erläutert habe, dass ich ein 3D-Array innerhalb v haben: A [B [C]] ]

ich eine AxB Matrix erstellt werden soll, wo verschiedene Werte von C in der Matrix leicht aufrufbar sind

+0

So könnte der Wert eines der Elemente in '' 'overall_dictionary''' sein; '' [[[1,2], [3,4]], [[5,6], [7,8]]] "' '? Was würde B = 2 und C = 2 machen? – wwii

+0

Sie haben effektiv ein dreidimensionales Array für jeden Wert 'v' ... sagen Sie deutlicher, was Sie mit diesem Array machen wollen (dh was Sie berechnen wollen), und Sie erhalten mehr nützliche Hilfe. – donkopotamus

Antwort

0

die gute Nachricht ist: Sie haben bereits Ihr Wörterbuch Sie in Form wollen! Eine Liste von Listen ist eine 2D-Matrix.

Die schlechte Nachricht: Es ist nicht wirklich klar, welche Fehler Sie haben und wo sie auftauchen. Näheres dazu wäre hilfreich, um Lösungen zu finden.

In der Zwischenzeit ein paar Kommentare zu Ihrem Code (obwohl ich glaube nicht, es notwendig ist, da Sie bereits eine Matrix haben):

  • Sie verwenden Höhe in Ihrem Code, aber es nie initialisieren. Ist die Höhe = num_rows?
  • Statt durch alle Reihen von Iterieren, Breite jedes Mal aktualisiert wird, tun Sie es einfach einmal, wie:

    width = len(v[0]) #This assumes all rows have same number of cols 
    
  • keine Notwendigkeit für die Semikolons. (Nicht, dass irgendetwas mit ihnen nicht stimmt!)

  • Die Einrückung in Ihrem Code ist nicht klar. Stellen Sie sicher, dass alles für die Schleife in Ordnung ist.

  • Sie sollten 'für Element' nicht 'für Element a' haben.

  • Ich denke, der Zähler kompliziert die Dinge. Versuchen Sie stattdessen, 'enumerate' oder etwas ähnliches zu verwenden.

+0

Ich habe versucht, width = len (v [0]), aber ich habe einen Fehler beim Aufruf v [0], dass der Listenindex außerhalb des Bereichs ist. Ich verstehe nicht, warum das so ist. Ja, height = num_rows Entschuldigung, –

+0

Ich kann diesen Fehler nicht replizieren.Ich benutzte overall_dictionary = {'key1': [[[1,2], [3,4]], [[5,6], [7,8]]], 'key2': [[[9, 10], [11,12]], [[13,14], [15,16]]]} Und konnte über Iteritems auf v [0] zugreifen. Allerdings verstehe ich immer noch nicht, was du machen willst. Sie haben bereits ein Wörterbuch von Matrizen. – Noam

+0

Mit Ihrem Beispiel, was ich schließlich tun möchte, ist das Folgende, wenn die Matrix 2x2 mit [1,2] in Zelle 1, [3,4] in Zelle 2, [5,6] in Zelle3 usw. war ... ein neues Wörterbuch mit 'key1' zurückgeben, aber als Wert eine Liste, die folgendes enthält: Durchschnitt und Standardabweichung jedes Index in den Spalten so avg (1 und 5), avg (2 und 6), avg (3 und 7), avg (4 , 8). –