2016-12-07 2 views
0

Ich habe eine Datenbank (Python tinydb) mit Wörterbüchern. Jede dieses Wörterbücher enthält Daten für eine bestimmte Epoche Zeit:Subtrahieren Sie die Werte mehrerer Wörterbücher mit den gleichen Schlüsseln

Dictionary 1 = { 'epochtime' = 1480417585, 'Apfel' = 1,25 'Melone' = 2,50}

Wörterbuch 2 = { 'epochtime' = 1480422580, 'Apfel' = 1,40, 'Melone' = 2,30}

Wörterbuch 3 = ...

ich möchte für jede Epoche Zeit, um die Änderung des Wertes für jede Frucht vergleichen:

  • Was ist der Chan? ge von Preisen für jede Frucht, zwischen Wörterbuch 1 und 2?
  • Wie ist die Preisänderung für jede Frucht zwischen Dictionary 2 und 3?
  • ...

Offensichtlich muß ich die Werte in chronologischer Reihenfolge subtrahieren (hohe Epoche Zeit - niedrige Epoche Zeit, niedrige Epoche Zeit - noch niedrige Epoche Zeit, etc.).

Ich bin sicher, es gibt Python Gurus, die das in ein paar Zeilen schreiben können, aber ich bin im Moment völlig ratlos!

Ich benutze Python 3, aber Python 2.7 Rat wird auch mehr als hilfreich sein.

+2

sortieren Wörterbücher basierend auf dem Wert von 'epochtime'; subtrahiere dann jeden Wert vom nächsten. Komm zurück, wenn du Hilfe bei einem bestimmten Schritt brauchst. – alexis

Antwort

0

Der erste Schritt besteht darin, Ihre Einträge nach Epochen zu sortieren. Unter der Annahme, sie sind in einer Liste entries,

sorted_entries = sorted(entries, key=lambda e: e['epochtime']) 

key Der Parameter ist eine Funktion der jeder Eintrag abbildet auf einen Wert, der die Sortierreihenfolge für die Erfassung angibt. Daher enthält sorted_entries jetzt alle Einträge nach ansteigendem Epochen-Zeitstempel.

Um tatsächlich die Ergebnisse, können Sie nur paarweise durchlaufen:

for i in range(len(sorted_entries)-1): 
    first, second = sorted_entries[i], sorted_entries[i+1] 

    # Do whatever calcs you need 
    print("Apple change: {}".format(second['apple'] - first['apple'])) 
+0

Danke, es funktionierte mit ein bisschen Modifikation meines eigenen Codes! – Hex

Verwandte Themen