Moja próba programowego utworzenia słownika list nie pozwala mi indywidualnie adresować kluczy słownika. Ilekroć tworzę słownik list i próbuję dołączyć do jednego klucza, wszystkie są aktualizowane. Oto bardzo prosty przypadek testowy:Jak zainicjować słownik pustych list w Pythonie?
data = {}
data = data.fromkeys(range(2),[])
data[1].append('hello')
print data
Rzeczywisty rezultat: {0: ['hello'], 1: ['hello']}
Oczekiwany wynik: {0: [], 1: ['hello']}
Oto, co działa
data = {0:[],1:[]}
data[1].append('hello')
print data
faktycznych i oczekiwany wynik: {0: [], 1: ['hello']}
Czemu czy metoda fromkeys
nie działa zgodnie z oczekiwaniami?
Cóż to jest raczej nieintuicyjne zachowanie, jakikolwiek pomysł na to, dlaczego ten sam obiekt jest używany do wszystkich kluczy? – Bar
@Bar Ponieważ nie ma nic więcej, funkcja mogłaby zrobić w ramach semantyki języka Python. Przekazujesz pojedynczy obiekt, który ma być użyty jako wartość dla wszystkich kluczy, tak aby pojedynczy obiekt był używany dla wszystkich kluczy.Byłoby lepiej, aby metoda 'fromkeys()' przyjmowała funkcję fabryczną, więc moglibyśmy przekazać funkcję 'list' jako funkcję, i ta funkcja byłaby wywoływana raz dla każdego utworzonego klucza, ale to nie jest rzeczywiste API 'dict.fromkeys()'. –