2015-02-27 18 views
5

Dokumentacja collections.OrderedDict opisuje OrderedDict postaciOrderedDict: czy wartości są również uporządkowane?

dict który zapamiętuje kolejność klucze najpierw wkładany

więc kolejność

for k in dict: 
    ... 

for k in dict.keys(): 
    ... 

przewidywalne.

Jednak nie mówi nic o wartościach. Jeśli muszę tylko powtórzyć wartości w następujący sposób, czy wyniki będą również zgodne z zamawianiem przez wstawkę?

for v in dict.values(): 
    ... 

kilka szybkich testów tutaj w CPython wykazały, że aby być przypadek, ale to może być tylko coinicidental z bieżącej realizacji (nie testowałem żadnych innych).

Odpowiedz

7

Tak, listy według keys() i values() są ułożone w odpowiadające im zamówienia we wszystkich dyktach, not just in ordered ones. (Kolejność jest dowolna dla normalnych dicts, ale to samo arbitralny nakaz keys(), values() i items(), chyba że DICT został zmodyfikowany w międzyczasie).

2

Tak, są one klasyfikowane w tej samej kolejności, jak klucze są. To samo dotyczy wszystkich implementacji dict.

klucze i wartości są potwierdzili nad w dowolnej kolejności, która jest nieprzypadkowe, zmienia się w poprzek implementacji Pythona i zależy od historii słownika za insercji i delecji. Jeśli klawisze, wartości i widoki pozycji zostaną powtórzone bez żadnych zmian w słowniku Słownika , kolejność pozycji będzie bezpośrednio odpowiadać. Pozwala to na utworzenie par (value, key) przy użyciu zip(): . Innym sposobem utworzenia tej samej listy jest pairs = [(v, k) for (k, v) in d.items()].

https://docs.python.org/3/library/stdtypes.html#dict-views

Powiązane problemy