Krok 1: przekształcamy kod używając temp_list w jedno wyrażenie (zakładam, że poza tym kodem nie jest potrzebne temp_list
), używając metody dodawania zamiast metody append
. Ponadto, nie musimy wyraźnie używać dict.keys()
, jak wspomnieli inni (a tak naprawdę to marnuje ogromną ilość czasu).
for value in value_list:
if value.key in dict:
dict[value.key] = dict[value.key] + [value.val]
else:
dict[value.key] = [value.val]
Krok 2: Przekształć przypisania w tę samą lokalizację, używając składni wyrażeń warunkowych.
for value in value_list:
dict[value.key] = dict[value.key] + [value.val] if value.key in dict else [value.val]
Krok 3: Dołączanie lub poprzedzenie pustą listę nie ma wpływu na wartość z listy, tak że możemy wstawić, a następnie czynnik poza wspólną „dodatek” wartości.
for value in value_list:
dict[value.key] = (dict[value.key] if value.key in dict else []) + [value.val]
Krok 4: Rozpoznawanie że DICT posiada wbudowane funkcjonalności do dostarczania „default” wartość, gdy klucz jest nieobecny:
for value in value_list:
dict[value.key] = dict.get(value.key, []) + [value.val]
Krok 5: Zamiast się wartość, modyfikując go i ustawienie go z powrotem, możemy użyć .setdefault
dać nam aktualną zawartość (lub ustawić je, jeśli jeszcze nie ma), a następnie wrócić do używania .append
zmodyfikować listę:
for value in value_list:
dict.setdefault(value.key, []).append(value.val)
(Chodzi mi o to, że mogłem tylko na to spojrzeć i zastanowić się przez chwilę, ale gdy zobaczyłem każdy krok, dokładniej, dokąd zmierzamy ...)
Zaledwie dwie małe uwagi: 1) '... w dict.keys():' można skrócić do '... in dict:'. 2) Zmienne nie powinny być nazwane po wbudowaniu - w takim przypadku rozważ zmianę nazwy na "dyktuj". – miku
co masz na myśli w lepszy sposób? prostsze czy szybsze? –