SORU
6 HAZİRAN 2009, CUMARTESİ


Python listeleri, bir sözlük oluşturma

Listeleri 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)

D çünkü bir KeyError olsun, [...] bir liste değil. Bu durumda, bir atama sonra aşağıdaki kodu sözlüğü başlatmak için ekleyebilirsiniz.

for x in range(1, 4):
    d[x] = list()

Daha iyi bir yolu bunu yapmak için vardır? Diyelim tuşlarını bilmiyorum ** 10 saniye döngü içinde ben kadar ihtiyacım olacak. Ö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)

Alternatif sonra yerine olurdu

d[scope_item].append(relation)

ile

if d.has_key(scope_item):
    d[scope_item].append(relation)
else:
    d[scope_item] = [relation,]

Bu işlemek için en iyi yolu nedir? İdeal olarak, ekleme "sadece iş". Bir şekilde ben ilk listeyi oluştururken eğer her anahtar tanımıyorum bile boş listeleri, bir sözlük istiyorum, o ifade var mı?

CEVAP
6 HAZİRAN 2009, CUMARTESİ


defaultdict kullanabilirsiniz:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for i in a:
...   for j in range(int(i), int(i)   2):
...     d[j].append(i)
...
>>> d
defaultdict(<type 'list'>, {1: ['1'], 2: ['1', '2'], 3: ['2']})
>>> d.items()
[(1, ['1']), (2, ['1', '2']), (3, ['2'])]

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • How It Should Have Ended

    How It Shoul

    5 Mart 2007
  • RomanAtwood

    RomanAtwood

    18 Kasım 2009
  • TheMasterOfHell100

    TheMasterOfH

    13 AĞUSTOS 2011