Değerleri listeler olan bir sözlük oluşturmak istiyorum. Örneğin:
{
1: ['1'],
2: ['1','2'],
3: ['2']
}
Eğer yaparsam:
d = dict()
a = ['1', '2']
for i in a:
for j in range(int(i), int(i) + 2):
d[j].append(i)
Bir KeyError alıyorum, çünkü d [...] bir liste değil. Bu durumda, sözlüğü başlatmak için a'nın atanmasından sonra aşağıdaki kodu ekleyebilirim.
for x in range(1, 4):
d[x] = list()
Bunu yapmanın daha iyi bir yolu var mı? İkinci for
döngüde olana kadar ihtiyacım olacak anahtarları bilmediğimi varsayalım. Örneğin:
class relation:
scope_list = list()
...
d = dict()
for relation in relation_list:
for scope_item in relation.scope_list:
d[scope_item].append(relation)
Bir alternatif daha sonra
d[scope_item].append(relation)
ile
if d.has_key(scope_item):
d[scope_item].append(relation)
else:
d[scope_item] = [relation,]
Bununla başa çıkmanın en iyi yolu nedir? İdeal olarak, ekleme "sadece işe yarar". Listeyi ilk oluşturduğumda her anahtarı bilmesem bile, boş listelerin sözlüğünü istediğimi ifade etmenin bir yolu var mı?
collections
Örneğin modül altındaki diğer sözlükler de bu şekilde çalışırcollections.OrderedDict
.