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

  • Fraser Raft

    Fraser Raft

    9 Mart 2010
  • hockeywebcasts

    hockeywebcas

    31 EKİM 2012
  • Attempts at least

    Attempts at

    1 Ocak 2007