Python

2016-04-11 11 views
-6

Merhaba benPython

a = [{'Name': 150,'number': 100},{'Name': 190, 'number': 200},{'Name': 190, 'number': 300}] 

i bazı değişkenleri eklemek gerekir listesi var bu çalışma almak gibi olamaz listeye değişkenleri ekleyerek ama elde hataları

a.append ({'Name': + Name + ',' + 'number'+ ':' + Number}) 
TypeError: bad operand type for unary +: 'str' 

Tam kod tutmak :

a = [{'Name': 150,'number': 100},{'Name': 190, 'number': 200},{'Name': 190, 'number': 300}] 
    Name = '150' 
    number = '10' 

    a.append ({'Name': + Name + ',' + 'number'+ ':' + Number}) 


    def get_number(name): 
      return lambda x: x['number'] if x['Name']==name else 0 

    names = sorted(set(map(lambda x: x['Name'], a))) 
    result = [{'Name':name,'number':sum(map(get_number(name), a))} for name in names] 

    string = str(result) 
    remove = "[{}],'" 
    for i in range (0,len(remove)): 
      string =string.replace(remove[i],"") 
    b = string 

    print b 

Verileri bu listeye nasıl eklerim?

+2

Neden listeyi bir dizeye dönüştürüyorsunuz ve sonra bir öğeyi kaldırmak için string işlemlerini kullanıyorsunuz ?! – ThiefMaster

+0

Al listeye dönüştürüyorum çünkü isimleri ve sayıları alıyorum. adın toplamını görebilmem için sames isimlerinin eklenmesi gerekiyor ve bunu bir xml öğesine ekliyorum – user2433624

cevap

2

Sözlük eklemeye çalışıyorsunuz. Bu çalışması gerekir:

a.append({'Name': Name, 'number' : Number}) 

Eğer istihdam yazılı tarzı bazı çok sevimli sezgi istihdam, ama bu işler böyle yürümüyor :) Sözlükler otomatik diğerleri yerleştirilir şekilde kendilerini biçimlendirir, sadece gereken Onlara doğru anahtarları ve değerleri besle.

Hata yaptığınızın nedeni, önüne koyduğunuz : yüzünden oldu. Bu Python'a bir sözlük kullandığını söyler - ancak hemen ardından bir +. Şimdi Python sağa bakar, bir ip görür, "Tamam, birbirinize iki dizge eklemeye çalışıyorsunuz" diye düşünür, sola bakar ve bir dizge olmayan bir kolon görür. Python şaşkın: Solda bir dize olarak yorumlanabilecek bir şeye ihtiyaç var, aksi halde bu işe yaramayacak. Yani bir hata atıyor.

Edit: Tek operatör hakkında düzeltme, lütfen @PM 2Ring adlı kullanıcının yorumlarına bakın!

+1

"sola bakar ve bir dizge olmayan bir kolon görür". Hayır. Ayrıştırıcı zaten kolonla uğraştı ve şimdi '' Name '' tuşuyla ilişkilendirilecek bir değer oluşturmak için geçerli bir ifade arıyor.Bir toplayıcı işleç olarak (+ dizeleri dize birleştirme anlamındadır) yorumlamayı dener. Bu, [tekli pozitif] olarak yorumlanır (https://en.wikipedia.org/wiki/Unary_operation#Unary_negative_and_positive) operatörü (hata iletisi belirtildiği gibi), ancak bu işleç dizeler için tanımlanmamıştır. –

+1

(devamı) Sayılar için tek yönlü pozitif _is_ tanımlanmış, böylece 'b' bir sayı olan' a = + 5' ve 'a = + b' gibi şeyler yapabiliriz. Doğru, bu oldukça işe yaramaz, ama a = -b ile simetrik ve ayrıştırıcıya tekil pozitif bir şekilde işlem yapmak ucuz. :) –

1

Burada + kullanmaya gerek yoktur:

a.append ({'Name': Name, 'number': Number}) 

+ dizeleri katılırken veya içindir: Eğer yaptığımız gibi öncelikle a değerini ilan ettiği sadece anahtarın sonra değişken değerini koyabilirsiniz sayı ekleyerek, ancak burada bir sözlük oluşturmaya çalışıyoruz. çünkü sen

{"Key": value, "Another Key": value, ...} 

+ işaretleri gerekmez şey katılmadan değil, sadece kullanan bir sözlük oluştururken Python yerleşik sözdizimi: bunu biçimidir.

+0

Açıklama için teşekkürler, bu bana çok yardımcı oldu. – user2433624

0

Kodunuzda hata belirgindir ve ayrıca TypeError açıkça hatanın nerede olduğunu söyler. İfadede '+' kullanmanız gerekmiyor.

a.append ({ 'Adı':: Adı, 'numara': Number})

'+' dizeleri eklemek için kullanılır ve sizin durumunuzda sen Basitçe şöyle bakmak kodunu düzenlemek bir değere değişken atamak. Umarım yardımcı olur. :)