2015-05-14 15 views
18

üzerine yazarsa?kaldırın hatası bir Python dict anlama bir tuşa geçersiz olsaydı istisna yükseltmek dict anlama almanın bir yolu var mı kilit

>>> {k:v for k, v in ('a1', 'a2', 'b3')} 
{'a': '2', 'b': '3'} 

Ben for döngü ile yapılabilir bunun farkına:

Örneğin, ben anahtar 'a' için iki değer vardır çünkü hata aşağıdaki istiyoruz. Anlama sözdizimini korurken bunu yapmanın bir yolu var mı?

class DuplicateKeyError(ValueError): pass 

def dict_no_dupl(it): 
    d = {} 
    for k, v in it: 
     if k in d: raise DuplicateKeyError(k) 
     d[k] = v 
    return d 

dict_no_dupl((k, v) for k, v in ('a1', 'a2', 'b3')) 

Bu yardımcı işlev eklemek, ama sağlam anlama sözdizimi (makul) tutar:

+2

Değil ek kod olmadan. Örneğin, beklenen uzunluk için açık bir şekilde test edebilirsiniz. Sözlük kavrama sözdizimi, normal bir sözlük gibi davranır, anahtar/değer çiftlerini tek tek veya “anahtar” değer çiftleri ile sıraya dizilebilen “dict (”): son anahtar kazanır. –

+0

Her bir anahtarın daha önce görülüp görülmediğini kontrol etmek için bir yan etki kullanabilirsiniz, ancak bir sözlük kavrayışının içinden 'yükselemezsiniz. – jonrsharpe

+0

Sözlük kavrama yeteneğine sahip misiniz? Belki başkası '.throw()' diyerek dict anlayışına bir istisna atar. Ama bu muhtemelen çok iyi bir tasarım değil. – Kevin

cevap

16

Bir yardımcı fonksiyonu ile bir jeneratör kullanabilirsiniz.

11

anahtar bir çarpışma neden olan umurumda değil ise: Oluşturulan dict len() ile uygun boyutta olduğundan

kontrol edin.

İlgili konular