Chcę utworzyć słownik, którego wartościami są listy. Na przykład:
{
1: ['1'],
2: ['1','2'],
3: ['2']
}
Jeśli zrobię:
d = dict()
a = ['1', '2']
for i in a:
for j in range(int(i), int(i) + 2):
d[j].append(i)
Dostaję błąd KeyError, ponieważ d [...] nie jest listą. W takim przypadku mogę dodać następujący kod po przypisaniu a w celu zainicjowania słownika.
for x in range(1, 4):
d[x] = list()
Czy jest na to lepszy sposób? Powiedzmy, że nie znam kluczy, których będę potrzebować, dopóki nie będę w drugiej for
pętli. Na przykład:
class relation:
scope_list = list()
...
d = dict()
for relation in relation_list:
for scope_item in relation.scope_list:
d[scope_item].append(relation)
Alternatywą byłoby wówczas zastąpienie
d[scope_item].append(relation)
z
if d.has_key(scope_item):
d[scope_item].append(relation)
else:
d[scope_item] = [relation,]
Jak najlepiej sobie z tym poradzić? Idealnie byłoby, gdyby dołączanie „po prostu działało”. Czy jest jakiś sposób, aby wyrazić, że chcę słownik pustych list, nawet jeśli nie znam każdego klucza przy pierwszym tworzeniu listy?
collections
module również działają w ten sposób, na przykładcollections.OrderedDict
.