SORU
1 EYLÜL 2012, CUMARTESİ


Python bir sözlükte çok değer eşleme

Bir sözlük { k1: f(v1), k2: f(v2) ... } fonksiyon geçmek şartıyla almak istiyorum { k1: v1, k2: v2 ... } f verildi.

Böyle bir işlevi dahili var mı? Ya ben yapmak zorundayım

dict([(k, f(v)) for (k, v) in my_dictionary.iteritems()])

İdeal sadece yazmak istiyorum

my_dictionary.map_values(f)

ya

my_dictionary.mutate_values_with(f)

Yani, eğer orijinal sözlük mutasyona uğramış ise benim için fark etmez ya da bir kopyası oluşturulur.

CEVAP
1 EYLÜL 2012, CUMARTESİ


Böyle bir işlevi yoktur; bunu yapmak için en kolay yolu dict bir kavrama kullanmak

my_dictionary = {k: f(v) for k, v in my_dictionary.items()}

Python 2.7, .items() yerine .iteritems() yöntemi bellek kaydetmek için kullanın. Dict anlama sözdizimi python 2.7 kadar tanıttı değildi.

Listelerinde bu yöntemi de yoktur; liste bir anlama ya da map() Bu fonksiyonu kullanmak gerekecek unutmayın.

Gibi, dict işleme için map() işlevini de kullanabilirsiniz:

my_dictionary = dict(map(lambda (k,v): (k, f(v)), my_dictionary.iteritems()))

ama o okunabilir, gerçekten değil.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ibebrent

    ibebrent

    23 Temmuz 2007
  • Majestic Casual

    Majestic Cas

    28 NİSAN 2012
  • UniqueApps

    UniqueApps

    4 Ocak 2009