2016-05-17 8 views
11

Plotten habe ich ein Python-Wörterbuch, das wie folgt aussieht:ein Python dict in der Reihenfolge der Schlüsselwerte

In[1]: dict_concentration 
Out[2] : {0: 0.19849878712984576, 
5000: 0.093917341754771386, 
10000: 0.075060643507712022, 
20000: 0.06673074282575861, 
30000: 0.057119318961966224, 
50000: 0.046134834546203485, 
100000: 0.032495766396631424, 
200000: 0.018536317451599615, 
500000: 0.0059499290585381479} 

Sie Schlüssel sind vom Typ int sind die Werte Typ float64. Leider, wenn ich versuche, dies mit Linien zu plotten, verbindet matplotlib die falschen Punkte (Plot angefügt). Wie kann ich Linien in der Reihenfolge der Schlüsselwerte verbinden? enter image description here

Antwort

27

Python-Wörterbücher sind ungeordnet. Wenn Sie ein geordnetes Wörterbuch möchten, verwenden Sie collections.OrderedDict

In Ihrem Fall, sortieren Sie die dict mit Schlüssel vor dem Plotten,

import matplotlib.pylab as plt 

lists = sorted(d.items()) # sorted by key, return a list of tuples 

x, y = zip(*lists) # unpack a list of pairs into two tuples 

plt.plot(x, y) 
plt.show() 

Hier ist das Ergebnis. enter image description here

+1

Großartig, vielen Dank, sehr geschätzt! – DJname

+2

Sehr nützlich zu wissen, dass das * das Tupel entpackt. – rAntonioH

2

Einfach die sortierten Einträge aus dem Wörterbuch an die plot() Funktion übergeben. concentration.items() gibt eine Liste von Tupeln zurück, wobei jedes Tupel einen Schlüssel aus dem Wörterbuch und seinen entsprechenden Wert enthält.

Sie können die Vorteile der Liste nehmen (mit *) Auspacken der sortierten Daten direkt an zip passieren, und dann wieder passieren in plot():

import matplotlib.pyplot as plt 

concentration = { 
    0: 0.19849878712984576, 
    5000: 0.093917341754771386, 
    10000: 0.075060643507712022, 
    20000: 0.06673074282575861, 
    30000: 0.057119318961966224, 
    50000: 0.046134834546203485, 
    100000: 0.032495766396631424, 
    200000: 0.018536317451599615, 
    500000: 0.0059499290585381479} 

plt.plot(*zip(*sorted(concentration.items()))) 
plt.show() 

sorted() Sorten Tupeln in der Reihenfolge der Elemente des Tupels Sie müssen also keine key-Funktion angeben, da die Tupel, die von dict.item() zurückgegeben werden, bereits mit dem Schlüsselwert beginnen.

Verwandte Themen