Python sözlük değerlerini değiştirme

Şu anda sadece tek bir kelime ve kelimenin kaynak metinde (İtalyanca Dante'nin İlahi Komedya'sı) kaç kez kullanıldığını gösteren 20.000'den fazla girdiye sahip bir sözlüğüm var.

Buldukça değeri gerçek bir tanımla değiştirerek tüm girişler üzerinde çalışmak istiyorum. Değiştirmek için (anlamını araştırırken) değer olarak bir sayıya sahip olan anahtar kelimeleri yinelemenin basit bir yolu var mı?

Sözlük başlıyor:

{'corse': 378, 'cielo,': 209, 'mute;': 16, 'torre,': 11, 'corsa': 53, 'assessin': 21, 'corso': 417, 'Tolomea': 21}  # etc.

Araştırmak ve tanımlamak için bir anahtar kelime önerecek bir tür uygulama.

Belirli değerler (veya değer türleri) üzerinde seçim yapamazsınız. Ya bir ters indeks oluşturacaksınız (sayıları anahtarlara (anahtar listelerine) geri eşleyeceksiniz) ya da her seferinde tüm değerler arasında döngü yapmanız gerekecek.

Zaten sayıları rastgele sırayla işliyorsanız, tüm öğeler arasında döngü de yapabilirsiniz:

for key, value in inputdict.items():
    # do something with value
    inputdict[key] = newvalue

Aksi takdirde ters indeksle giderdim:

from collections import defaultdict

reverse = defaultdict(list)
for key, value in inputdict.items():
    reverse[value].append(key)

Artık anahtarları değere göre arayabilirsiniz:

for key in reverse[value]:
    inputdict[key] = newvalue
Yorumlar (4)

Bir sözlük üzerinde yineleme yaparsanız anahtarları alırsınız, bu nedenle sözlüğünüzün data adlı bir değişkende olduğunu ve tanımı alan find_definition() işlevine sahip olduğunuzu varsayarsak, aşağıdaki gibi bir şey yapabilirsiniz:

for word in data:
    data[word] = find_definition(word)
Yorumlar (0)
Çözüm

İşte anahtarınızı bulacak ve değerinizi değiştirecek bir fonksiyon.

current_dict = {'corse': 378, 'cielo': 209, 'mute': 16}
print(current_dict)
def replace_value_with_definition(key_to_find, definition):
    for key in current_dict.keys():
        if key == key_to_find:
            current_dict[key] = definition

replace_value_with_definition('corse', 'Definition of "corse"')
print(current_dict)

Çıktı şudur:

{'corse': 378, 'cielo': 209, 'mute': 16}
{'corse': 'Definition of "corse"', 'cielo': 209, 'mute': 16}

Sözlüğünüzde döngü yapmanın çok uzun sürdüğünü fark ederseniz bir jeneratör işlevi deneyin:

def gen_replace_value_with_definition(key_to_find, definition):
    for key in current_dict.keys():
        if key == key_to_find:
            current_dict[key] = definition
            yield True
    yield False

found = False
while not found:
    found = next(gen_replace_value_with_definition('corse', 'Definition of "corse" via generator'))

print(current_dict)

Çıktı:

{'corse': 'Definition of "corse" via generator', 'cielo': 209, 'mute': 16}
Yorumlar (2)