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?
python
dictionary
użytkownik118662
źródło
źródło
collections
module również działają w ten sposób, na przykładcollections.OrderedDict
.NameError: name 'a' is not defined
Możesz zbudować go ze zrozumieniem listy w następujący sposób:
A do drugiej części pytania użyj defaultdict
źródło
Możesz użyć
setdefault
:Raczej dziwnie nazwana
setdefault
funkcja mówi: „Uzyskaj wartość za pomocą tego klucza lub jeśli tego klucza nie ma, dodaj tę wartość, a następnie zwróć”.Jak słusznie zauważyli inni,
defaultdict
jest lepszym i bardziej nowoczesnym wyborem.setdefault
jest nadal przydatny w starszych wersjach Pythona (wcześniejszych niż 2.5).źródło
Odpowiedź na twoje pytanie została już udzielona, ale IIRC możesz zastąpić wiersze takie jak:
z:
To znaczy
d
odniesieniad.keys()
w tej konstrukcji. Czasamidefaultdict
nie jest najlepszą opcją (na przykład, jeśli chcesz wykonać wiele wierszy kodu poelse
skojarzeniu z powyższymif
), ain
składnię uważam za łatwiejszą do odczytania.źródło
Osobiście używam JSON do konwersji rzeczy na ciągi znaków i odwrotnie. Ciągi, które rozumiem.
źródło
łatwy sposób to:
źródło