Python - Haritalar
ChainMap olarak da adlandırılan Python Haritaları, birden çok sözlüğü tek bir birim olarak birlikte yönetmek için kullanılan bir veri yapısı türüdür. Birleşik sözlük, herhangi bir yinelenen anahtarı ortadan kaldıran belirli bir sırada anahtar ve değer çiftlerini içerir. ChainMap'in en iyi kullanımı, aynı anda birden fazla sözlükte arama yapmak ve uygun anahtar-değer çifti eşlemesini elde etmektir. Ayrıca bu Zincir Haritalarının yığın veri yapısı olarak davrandığını da görüyoruz.
ChainMap Oluşturma
İki sözlük oluşturuyoruz ve bunları koleksiyon kitaplığından ChainMap yöntemini kullanarak kulluyoruz. Ardından sözlüklerin kombinasyonunun sonucunun anahtarlarını ve değerlerini yazdırıyoruz. Yinelenen anahtarlar varsa, o zaman yalnızca ilk anahtardan gelen değer korunur.
import collections
dict1 = {'day1': 'Mon', 'day2': 'Tue'}
dict2 = {'day3': 'Wed', 'day1': 'Thu'}
res = collections.ChainMap(dict1, dict2)
# Creating a single dictionary
print(res.maps,'\n')
print('Keys = {}'.format(list(res.keys())))
print('Values = {}'.format(list(res.values())))
print()
# Print all the elements from the result
print('elements:')
for key, val in res.items():
print('{} = {}'.format(key, val))
print()
# Find a specific value in the result
print('day3 in res: {}'.format(('day1' in res)))
print('day4 in res: {}'.format(('day4' in res)))
Yukarıdaki kod çalıştırıldığında aşağıdaki sonucu verir.
[{'day1': 'Mon', 'day2': 'Tue'}, {'day1': 'Thu', 'day3': 'Wed'}]
Keys = ['day1', 'day3', 'day2']
Values = ['Mon', 'Wed', 'Tue']
elements:
day1 = Mon
day3 = Wed
day2 = Tue
day3 in res: True
day4 in res: False
Harita Yeniden Sıralama
Yukarıdaki örnekte sözlükleri toplarken sırasını değiştirirsek, elemanların konumlarının sürekli bir zincir içindeymiş gibi değiştiğini görürüz. Bu yine Haritalar'ın davranışını yığınlar halinde gösterir.
import collections
dict1 = {'day1': 'Mon', 'day2': 'Tue'}
dict2 = {'day3': 'Wed', 'day4': 'Thu'}
res1 = collections.ChainMap(dict1, dict2)
print(res1.maps,'\n')
res2 = collections.ChainMap(dict2, dict1)
print(res2.maps,'\n')
Yukarıdaki kod çalıştırıldığında aşağıdaki sonucu verir.
[{'day1': 'Mon', 'day2': 'Tue'}, {'day3': 'Wed', 'day4': 'Thu'}]
[{'day3': 'Wed', 'day4': 'Thu'}, {'day1': 'Mon', 'day2': 'Tue'}]
Harita Güncelleniyor
Sözlüğün öğesi güncellendiğinde, sonuç Zincir Haritası'nın sonucunda anında güncellenir. Aşağıdaki örnekte, yeni güncellenen değerin, ChainMap yöntemini tekrar açıkça uygulamadan sonuca yansıdığını görüyoruz.
import collections
dict1 = {'day1': 'Mon', 'day2': 'Tue'}
dict2 = {'day3': 'Wed', 'day4': 'Thu'}
res = collections.ChainMap(dict1, dict2)
print(res.maps,'\n')
dict2['day4'] = 'Fri'
print(res.maps,'\n')
Yukarıdaki kod çalıştırıldığında aşağıdaki sonucu verir.
[{'day1': 'Mon', 'day2': 'Tue'}, {'day3': 'Wed', 'day4': 'Thu'}]
[{'day1': 'Mon', 'day2': 'Tue'}, {'day3': 'Wed', 'day4': 'Fri'}]