Şu anda bir sözlük şöyle var:Sözlükle listeyi değer olarak tersine çevirmenin en iyi yolu?
app_dict = {test1 : [[u'app-1', u'app-2', u'app-3', u'app-4']]}
Ben (başka bir sözlükle çalışmaktan kanıtlanmış) sözlüğünü tersine bir işlevi var. Ben aşağıdaki işlemleri
def reverse_dictionary(self, app_dict):
""" In order to search by value, reversing the dictionary """
return dict((v,k) for k in app_dict for v in app_dict[k])
bir hata alıyorum:
data = reverse_dictionary(app_dict)
print data
ERROR:
return dict((v,k) for k in app_dict for v in app_dict[k])
TypeError: unhashable type: 'list'
emin değilim ama mesele benim Sözlük ne şekilde yapılandırıldığı ile olduğunu düşünüyorum, neden orada değil eminim Listemde çift parantez var ve bunları kaldırmak için görünmüyor olabilir. App_dict ile çalışmak için reverse_dictionary işlevini nasıl değiştirebilirim?
DÜZENLEME:
Bu noktada new_dict yazdırırken, benim Sözlük değerler (çift parantez ile) aşağıdaki biçimde gösteriyor kinew_dict = collections.defaultdict(list)
app_dict = collections.defaultdict(list)
#at this point, we have filled app_dict with data (cannot paste here)
for o, q in app_dict.items():
if q[0]:
new_dict[o].append(q[0])
Not: [[u'app-1' , u'app 2' , u'app-3' , u'app-4' ]]
I ekleme hattı değiştirirseniz: new_dict [o] .Append (q, [0] [0]) Bu yüzden Bunun yerine, bunun yerine parantezler şerit olacağını varsayalım, bu listede yalnızca ilk değeri ekler:
[u'app-1']
Bu sorunu yaşadığımdan eminim çünkü çıktı parantezlerini başarıyla listeden çıkaramıyorum.
İpucu: Çift parantez başka bir listeye – Izkata
içinde bir liste vardır bu konu biliyorum, ama bunu düzeltmek için ne kadar emin değilim benim güncellenmiş yazıyı – david
bakınız. – david