2010-11-08 17 views
5

Bir görüntü işleme komut dosyası üzerinde çalışıyorum. Kullanıcının bir görüntüdeki bazı sınıfları bir metin dosyasıyla nasıl değiştireceğini belirtmesine izin vermeliyim. Bu dosyadaki sözdizimi basit ve apaçık olmalıdır.Bir sözlüğün dize temsilini gerçek bir sözlüğe dönüştürme

125:126, 126:126, 127:128, 128:128 

ve sonra (bu kayıp halka) gerçek sözlüğe haline dönüştürmek:

a = {125:126, 126:126, 127:128, 128:128} 

The yakınlarında neler yaptığımı düşündüm bir sözlük dize sürümünü yazmak için kullanıcı elde etmektir görüntünün sınıfların yeniden eşleştirme sonra böyle bitmiş olacaktır:

u, indices = numpy.unique(image, return_inverse=True) 
for i in range(0, len(u)): 
    u[i] = a[u[i]] 
updatedimage = u[indices] 
updatedimage = numpy.resize(updatedimage, (height, width)) #Resize to original dims 

gerçek sözlüğüne "dizesi version" dan bu dönüşümü yapmak için basit bir yolu var mı? Kullanıcının kullanabileceği daha kolay/alternatif bir sözdizimi düşünebiliyor musunuz?

cevap

11

Sen ast.literal_eval kullanabilirsiniz:

>>> import ast 
>>> ast.literal_eval('{' + s + '}') 
{128: 128, 125: 126, 126: 126, 127: 128} 

Not Bu Python 2.6 veya daha yeni gerektirir.

alternatif ',' üzerine dize bölmek ve sonra ':' her parça ayrıldı ve bundan bir dict oluşturmaktır:

>>> dict(map(int, x.split(':')) for x in s.split(',')) 
{128: 128, 125: 126, 126: 126, 127: 128} 

Her iki örnek başlangıçtaki dize s adında bir değişken olduğunu varsayalım:

>>> s = '125:126, 126:126, 127:128, 128:128' 
+0

Teşekkürler, her ikisi de harika çalışıyor. Ben senin alternatifini tercih ederim; başka bir ithalatı kaydedecek ve eski sürümüyle çalışacak ... – Benjamin

İlgili konular