SORU
9 EKİM 2008, PERŞEMBE


Bölme Python bir sözlük için noktalı virgülle ayrılmış bir dize,

Bu gibi bir dize var:

"Name1=Value1;Name2=Value2;Name3=Value3"

Bu yaptığım sanki bu dize almak ve bir sözlük oluşturmak, yerleşik sınıf/Python fonksiyon: var

dict = {
    "Name1": "Value1",
    "Name2": "Value2",
    "Name3": "Value3"
}

Modüller kullanılabilir aradım ama uyan bir şey bulamıyorum.

< / ^ hr .

Teşekkürler, böyle ufacık çözüm olduğundan ilgili kendimi kodu nasıl biliyorum, ama genellikle mayın tarlaları ne bekliyor (örn. birisi yazıyor: Ad1='Değer1=2';) vb. sonra ben genellikle ön-test bazı işlev tercih ederim.

- Ben de tek başıma yaparım.

CEVAP
9 EKİM 2008, PERŞEMBE


Yerleşik var, ama jeneratör bir anlama ile bu oldukça basit yapabilirsiniz:

s= "Name1=Value1;Name2=Value2;Name3=Value3"
dict(item.split("=") for item in s.split(";"))

[Düzenle]Güncellemenizi alıntı işlemek için gerekebilir size gösteriyor. Bu şeyleri arıyorsanız tam formatı ne (ne alıntı karakter kabul edilir, ne karakter vb kaçış) bağlı olarak daha da karmaşıklaştırıyor. Csv modülü at eğer format anlatabileceğiniz, görmek için bakmak isteyebilirsiniz. İşte bir örnek: CSV kayıtları bir dizi üzerinden yineleme yapmak için, bu yüzden .tasarlanmıştır (API bu örnek için biraz aksak olduğunu Unutmayın, sadece ilk satırı bakmak için yapıyorum() gelecek diyor. İhtiyaçlarınıza göre ayarlayın):

>>> s = "Name1='Value=2';Name2=Value2;Name3=Value3"

>>> dict(csv.reader([item], delimiter='=', quotechar="'").next() 
         for item in csv.reader([s], delimiter=';', quotechar="'").next())

{'Name2': 'Value2', 'Name3': 'Value3', 'Name1': 'Value1=2'}

Biçimi tam yapısına bağlı olarak, kendi basit ayrıştırıcı ancak yazmak gerekebilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Garrett Müller

    Garrett Mül

    26 HAZİRAN 2009
  • NLthomas21

    NLthomas21

    20 Mayıs 2008
  • Professor Messer

    Professor Me

    27 NİSAN 2007