horus666

"for key in a_dict: ... " czy "for key in a_dict.keys(): ..." ?

  • "for key in a_dict: ... " 42.2% (19)
  • "for key in a_dict.keys(): ..." 57.8% (26)

45 głosów

  • Najlepsze
  • Wszystkie komentarze
vogello
vogello
To zalezy co chcesz zrobic. Metoda keys() zwraca view object ktory np. pozwala manipulowac elementami slownika podczas iteracji, czego nie mozesz zrobic podczas iteracji po "golym" slowniku.

Tak wiec jesli nie zamierzasz nic modyfikowac (albo chcesz miec pewnosc ze nic ci twojego ficta nie modyfikuje) mozesz iterowac po dict'cie bezposrednio. Jesli jednak chcesz modyfikowac go w czasie iteracji - uzyj keys().
horus666
horus666 Autor
1
Zycie nauczylo mnie ze w przypadku pythona nie warto zdawac sie na intuicje ;) chyba ze masz ta intuicje wycwiczona w kierunku pythona. Wszystkie metody wbudowane sa wielokrotnie szybsze niz budowanie ich odpowiednikow w golym pythonie (np. list comprehension vs petla + reczne wypelnianie listy; petla for jest szybsza niz while z incrementacja warunku) - poniewaz pod "maska" pythona siedzi sobie C++ ktory pokazuje na co go stac. W tym przypadku tez.
horus666
horus666 Autor
0
@vogello: O widzisz, tego nie wiedziałem. Co pewne kosztem wydajności.. ale spoko.
vogello
vogello
@horus666: Wydajność w obu przypadkach jest praktycznie taka sama
horus666
horus666 Autor
0
@vogello: No wiesz, nie zupełnie. Pod maską pewnie Python tworzy osobną tablicę ze shaszowanymi kluczami, którą po iteracji pewnie wykorzystuje do nadpisania oryginalnych kluczy. Co prawda - jak mówisz różnica na ogół niewielka ale przy większych dictach może już być problem.
horus666
horus666 Autor
0
@horus666: koorvv@, *niezupełnie
vogello
vogello
Pod maską pewnie Python tworzy osobną tablicę ze shaszowanymi kluczami, którą po iteracji pewnie wykorzystuje do nadpisania oryginalnych kluczy


@horus666: Zycie nauczylo mnie ze w przypadku pythona nie warto zdawac sie na intuicje ;) chyba ze masz ta intuicje wycwiczona w kierunku pythona. Wszystkie metody wbudowane sa wielokrotnie szybsze niz budowanie ich odpowiednikow w golym pythonie (np. list comprehension vs petla + reczne wypelnianie listy; petla for jest szybsza niz while