Chcę znaleźć sposób na napisanie moich danych w pliku, przeczytaj go z pliku i sortuj go, przeczytaj posortowaną wersję.

Zasadniczo to, co mam:

  • Nazwa: ciąg
  • Średnia: Float.
  • Suma: Float.
  • Współrzędne: Lista list, zawiera pływaki. może być zmienna długość dla każdej nazwy

Sortuję wpisy w odniesieniu do średniej lub pola suma. Następnie przeczytam nazwę i współrzędne w posortowanym kolejności.

Próbowałem pisać słownika słowników do JSON; Jednak nie mogłem tego zrobić po przeczytaniu go i nie mógł go manipulować, jak chciałem. Mój słownik był jak

big_dictionary = {"name1":{"avg":0.1, "sum":0.2, "coordinates":[[0,1,2,3],[4,5,6,7]]}, "name2":{....}}

Próbowałem też CSV); Ale nie mogłem odczytać danych z jego oryginalnymi typami danych (nie mogłem przeczytać listy list do listy list na przykład)

big_list = [[name1, avg1, sum1, [coordinates1, coordinates2,...]], [name2, ...]]

Wiem, że jedna opcja jest używanie pandy. Jeszcze tego nie próbowałem, ponieważ nie znam go, a ja obawiam się, że nie tracę jeszcze więcej czasu podczas walki z jego metodami. Jeśli polecisz w ten sposób, potrzebuję też więcej informacji

Co mam zrobić w takim przypadku?

Aktualizacja: A co z zamawianiem?

1
kneazle 20 luty 2019, 12:16

2 odpowiedzi

Najlepsza odpowiedź

Możesz użyć listy słowników, więc możesz sortować łatwe:

data = [{"name": "name1", "avg":0.1, "sum":0.2, "coordinates":[[0,1,2,3],[4,5,6,7]]}, ..]
data.sort(key: lambda x: x["avg"]) # or sum
0
kederrac 20 luty 2019, 09:28

Trzymanie się JSON można posortować dane, a następnie napisz go jako listę dyktatorów, a nie dykt dict:

big_ordered_list_of_dicts = [
   {"name":"name1", "avg":0.1, "sum":0.2, "coordinates":[[0,1,2,3],[4,5,6,7]]},
   {"name":"name2", ... },
   ...,
   {"name":"zzzzz", ... },
]

Który będzie nadal w tej samej kolejności po napisaniu do JSON i odczytu wracania. Jest również dość łatwy do ponownego zamawiania tej listy, na przykład

list_in_sum_order = sorted( big_ordered_list_of_dicts, key=lambda x: x['sum'] ) 

I stosunkowo wydajne, ponieważ po prostu buduje kolejną listę, nie kopiuje ani nie przenosi rzeczywistych danych w dyktach

0
nigel222 20 luty 2019, 09:49