Jeśli pytasz, czy klucze i wartości są zwracane w tej samej kolejności, odpowiedź brzmi Tak. documentation mówi:
Jeśli items()
, keys()
, values()
, iteritems()
, iterkeys()
i itervalues()
nazywane są bez interweniujących modyfikacji do słownika, listy będą bezpośrednio odpowiadać.
Jeśli pytasz czy dict(zip(d.keys(), d.values())) == d
zawsze oceniać na True w każdych okolicznościach, odpowiedź brzmi: Nie. Można mieć wiele wątków, z jednym zmieniającym d
, podczas gdy druga jest wykonywany d.keys()
, d.values()
lub dict(...)
. Spowoduje to utworzenie interwencji modyfikujących, unieważniając wyżej wymienione warunki.
Rozpakowanie jest niepotrzebne, chociaż 'dict (d.iteritems())' działa równie dobrze. Jeśli o to chodzi, większość dyktuje (w tym 'dyktowanie') mapowania w specjalnym przypadku (w ogóle na iterabelach) i tak czy inaczej, chociaż nie jestem pewien, czy to uniwersalne. – delnan
@delnan przegłosował twój komentarz, ale myślę, że trzymanie się tego przykładu ma sens. – Triptych
Nigdy nie chciałbyś zrobić 'dict ((k, v) dla k, v w d.iteritems())' lub 'dict (d.iteritems())' ponieważ 'd.copy()' jest znacznie lepszy . – Gabe