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

  • max2sims2

    max2sims2

    19 Kasım 2008
  • NightShader1

    NightShader1

    25 Temmuz 2006
  • TV and Lust

    TV and Lust

    26 HAZİRAN 2006