2012-05-15 16 views
11

ı aşağıdaki python sözlüğün listesi var diyelim:başka listeden bir anahtar değeri çifti ile piton sözlükleri listesini güncellemek

dict1 = [{'domain':'Ratios'},{'domain':'Geometry'}] 

ve benzeri bir liste:

list1 = [3, 6] 

Ben

dict1 = [{'domain':'Ratios', 'count':3}, {'domain':'Geometry', 'count':6}] 

bunu nasıl yapacağını

: dict1 güncelleyebilir veya aşağıdaki gibi başka bir liste oluşturmak istiyorum?

+0

Örneğe göre, bu sorunun başlığı şu olmalıdır: "Başka bir listeden python sözlüklerinin değerlerinin güncellenmesi". Geçerli başlıktan bu liste1 = [('Oranlar', 3), ('Geometri', 6)] – yucer

cevap

21
>>> l1 = [{'domain':'Ratios'},{'domain':'Geometry'}] 
>>> l2 = [3, 6] 
>>> for d,num in zip(l1,l2): 
     d['count'] = num 


>>> l1 
[{'count': 3, 'domain': 'Ratios'}, {'count': 6, 'domain': 'Geometry'}] 

bunu yapmanın bir başka yolu, bir liste anlayışı ile bu kez mutasyona etmeyen orijinal:

>>> [dict(d, count=n) for d, n in zip(l1, l2)] 
[{'count': 3, 'domain': 'Ratios'}, {'count': 6, 'domain': 'Geometry'}] 
+0

Teşekkürler. İkinci çözüm, şu anki formunda bir hata verir –

+0

Python 3 kullanıyor musunuz? Büyük ihtimalle çapraz uyumlu olacak şekilde değiştireceğim. – jamylak

+0

Şu anda Python 3'te de çalışıyor, bu sizin sorununuz olduysa :) – jamylak

5

Bunu yapabilirsiniz:

for i, d in enumerate(dict1): 
    d['count'] = list1[i] 
2
Bunu yapabilirsin

:

# list index 
l_index=0 

# iterate over all dictionary objects in dict1 list 
for d in dict1: 

    # add a field "count" to each dictionary object with 
    # the appropriate value from the list 
    d["count"]=list1[l_index] 

    # increase list index by one 
    l_index+=1 

Bu çözüm yeni bir liste oluşturmuyor. Bunun yerine, mevcut dict1 listesini güncelleştirir.

+0

Python için çok ayrıntılı ama her şeyi gerçekten iyi açıklıyor. – jamylak

+1

Evet, haklısınız! Bu çok ayrıntılı. Ama burada başka cevaplar daha az olduğundan, daha açıklayıcı bir çözüm eklemenin iyi olacağını düşünüyorum. –

+0

Detaylı açıklama için teşekkür ederiz. –

0

Liste anlamayı kullanmak bunu yapmanın pythonik yolu olacaktır.

[data.update({'count': list1[index]}) for index, data in enumerate(dict1)] 

dict1

list1 karşılık gelen değeri ile güncellenir.

+1

-1 Mutasyonlar için liste kavramanın kullanılması ** ** pythonic değildir. Basit bir döngü kullanın. – jamylak

+0

bir dict çalışma güncellemesi, çıkış sağlamaz. data.update() Hiçbiri döndürmez. [Yok, Yok, ....] olarak çıkacaksınız –

İlgili konular