Python, bir anahtarın değeri olan bir listeye ekleyin.

İki farklı (işlem?) Anahtarın değeri olan bir listeye eklemek çalışıyorum. Aşağıda bir örnek:

item['foo'] = ["blah"]
item['foo'] = ["garble"]

item bir sözlük ve foo bir anahtardır. O zaman foo basarsam alıyorum:

[ "garble"]

istediğimde

["filan", "garble"]

İstediğim sonucu nasıl alabilirim?

EDIT: biçimlendirme

2

8 cevap

Değerin bir liste olmasını istediğiniz için, item ['foo'] 'a aşağıdaki gibi eklemelisiniz:

item = {}
item['foo'] = ["blah"]
item['foo'].append("garble")
print(item)

hangi yazdırır:

{'foo': ['blah', 'garble']}

Garble bir liste ise, örneğin garble = ["blah2"] gibi bir şey ise, böyle birleştirme işlemini yapabilirsiniz:

item = {}
item['foo'] = ["blah"]
garble = ["blah2"]
item['foo'] += garble
print item

Hangi sırayla yazdırır:

{'foo': ['blah', 'blah2']}
6
katma
garble, sonra çıktısını veren bir liste olsa da: foo: ['blah, [' garble ']]
katma yazar Python Noob, kaynak
Evet yaptım, teşekkürler!
katma yazar Python Noob, kaynak

Eklemek yerine sözlük değerinin üzerine yazıyorsunuz:

item['foo'] = ['blah']
item['foo'].append('garble')
2
katma

Gösterilen kodla yaptığınız şey önce ['blah'] değerini 'foo' anahtarına atamak ve sonra bir sonraki adımda değeri atamaktır. ['garble'] 'foo' anahtarına. Bir anahtar yalnızca bir değere atanabilir (ve "değer" ile herhangi bir tür anlamına geliriz; tamsayı, dize, liste, dize vb.), Yani ikinci atama ilkin üzerine yazar. İstediğiniz şey 'foo' anahtarının ["blah", "garble"] listesine atanmasıdır. Liste bir değerdir. Bu böyle bir adımda yapılabilir:

item['foo'] = ["blah", "garble"]

veya, bir nedenden ötürü, değerin bir liste olduğu bir anahtar değer çifti oluşturmak istiyorsanız, ve daha sonra o listeye bir öğe eklemek isterseniz, bunu nasıl yapacağınız:

item['foo'] = ['blah']
item['foo'].append('garble')

İlk satır, ['blah'] listesini 'foo' anahtarına atar. İkinci satır 'foo' anahtarına atanmış olan değeri item sözlüğünden alır, .append() liste yöntemini uygular ( SADECE çalışacaksa, 'foo' anahtarlı sözlükten alınan değer aslında bir liste ise!), ve sonra bu listeye 'garble' dizesini ekler . Sonuç:

>>> item['foo']
['blah', 'garble']

Bunu yapma:

item['foo'].append(['garble'])

ya da böyle bir listenin ikinci elemanı ile sonuçlanacak, bunun gibi:

['blah', ['garble']]
2
katma

Kapat, sadece eklemelisin

item = dict()

item['foo'] = ["blah"]
#above sets key foo to list value blah
#either of below appends a new value to the foo's list
item['foo'] += ["garble"] 
#or item['foo'].append("garble")
#note if this method is used list notation is needed to stop interpretation
# of each character. So I'd use append but wanted to show how close you were

print item
#outputs: {'foo': ['blah', 'garble']}

@PythonNoob, eğer + = çalışırsa çalışır, ancak .append tercih edilen yöntem olacaktır ve ayrıca @ Zizouz212 cevabını genişletme özelliği de faydalı bir ek olarak görüp bakmayacağımı yorumuna bakın.

1
katma
+ = İhtiyacım olan şey için çalıştı, teşekkür ederim :)
katma yazar Python Noob, kaynak
İşaret ediyorum, yöntemleri kullanmak daha temiz ve daha okunaklı kod üretiyor.
katma yazar Zizouz212, kaynak

Anahtarın değerlerini almak için:

>>> item["foo"] = ["bar"] # bar is the value

Çubuk bir liste ise, kendisiyle zaten ilişkilendirilmiş olan tüm yöntemleri kullanabilirsiniz. Burada append 'i kullanıyoruz.

>>> item["foo"].append("meh")
>>> item["foo"]
["bar", "meh"]

Elbette, bir liste eklemek (ve "birleştirilmiş" olmasını) istiyorsanız, extend yöntemini kullanın.

>>> item["foo"].extend(["gar", "ble"])
>>> item["foo"]
["bar", "meh", "gar", "ble"]

Orada extend kullanmazsanız, iç içe geçmiş bir listeniz olur:

["bar", "meh", ["gar", "ble"]]
1
katma

setdefault 'ı kullanabilirsiniz. İlk önce 'foo' 'u aramaya çalışacaktı; bulamazsa, setdefault , [] gibi bir değerle [] sözlüğüne 'foo' ekler ve ayrıca referansı bu değere döndürür. Döndürülen değere vals listesinden giriş ekleyebilirsiniz.

Eğer setdefault sözlükte 'foo' anahtarını bulabiliyorsa, sadece bir liste olacak şekilde karşılık gelen değeri verir.

item = {}
vals = ['blah', 'garble']

for x in vals:
    item.setdefault('foo', []).append(x)
print item['foo']         # print ['blah', 'garble']
1
katma
>>> item = {}
>>> item['foo'] = ["blah"]
>>> item['foo'].append("garble")
>>> item
{'foo': ['blah', 'garble']}
>>>
0
katma