📘 Set და Dictionary - Python-ის მონაცემთა სტრუქტურები¶
📑 სარჩევი¶
🔰 შესავალი¶
Python-ში მონაცემთა სტრუქტურები გვეხმარება ინფორმაციის ორგანიზებულად შენახვასა და დამუშავებაში. ძირითადი ტიპებია:
- list — სია (მაგ:
[1, 2, 3]) - tuple — ტუპლი (მაგ:
(1, 2, 3)) - set — სიმრავლე (მაგ:
{1, 2, 3}) - dictionary — ლექსიკონი (მაგ:
{"name": "Ana"})
ამ სახელმძღვანელოში დეტალურად განვიხილავთ Set და Dictionary-ს.
🔷 სიმრავლე (Set)¶
📌 რა არის Set?¶
Set არის უნიკალური ელემენტების კოლექცია - მათემატიკური სიმრავლის ანალოგი პროგრამირებაში.
🔑 ძირითადი მახასიათებლები:¶
✅ უნიკალურობა - არ ინახავს დუბლირებულ ელემენტებს
✅ დაულაგებელი - ელემენტების რიგი არ არის მნიშვნელოვანი
✅ ინდექსაცია არ მუშაობს - set[0] გამოიწვევს შეცდომას
✅ ცვალებადი - შეგიძლია დაამატო ან წაშალო ელემენტები
🛠️ Set-ის შექმნა¶
# უბრალო set
fruits = {"apple", "banana", "orange"}
numbers = {1, 2, 3, 4, 5}
# ცარიელი set
empty_set = set() # სწორი
# empty_set = {} # ❌ ეს ქმნის ცარიელ dictionary-ს!
# list-იდან set-ის შექმნა (დუბლიკატები ავტომატურად იშლება)
my_list = [1, 2, 2, 3, 3, 3]
unique_numbers = set(my_list) # {1, 2, 3}
➕ ელემენტების დამატება¶
fruits = {"apple", "banana"}
# ერთი ელემენტის დამატება
fruits.add("mango")
print(fruits) # {"apple", "banana", "mango"}
# რამდენიმე ელემენტის დამატება
fruits.update(["kiwi", "grape"])
print(fruits) # {"apple", "banana", "mango", "kiwi", "grape"}
➖ ელემენტების წაშლა¶
fruits = {"apple", "banana", "orange"}
# remove() - თუ ელემენტი არ არსებობს, მოხდება შეცდომა
fruits.remove("banana") # ✅ მუშაობს
# fruits.remove("mango") # ❌ KeyError!
# discard() - უსაფრთხო, შეცდომას არ იძლევა
fruits.discard("orange") # ✅ მუშაობს
fruits.discard("mango") # ✅ შეცდომა არ ხდება
# pop() - შემთხვევითი ელემენტის ამოღება
removed = fruits.pop()
print(f"ამოღებულია: {removed}")
# clear() - სრულად გასუფთავება
fruits.clear()
print(fruits) # set()
🔍 Set-ში შემოწმება¶
fruits = {"apple", "banana", "orange"}
# ელემენტის არსებობის შემოწმება
if "apple" in fruits:
print("ვაშლი არის set-ში")
if "mango" not in fruits:
print("მანგო არ არის set-ში")
# set-ის ზომა
print(len(fruits)) # 3
🧮 Set-ის ოპერაციები¶
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
# 1️⃣ გაერთიანება (Union) - ყველა ელემენტი ორივე სიმრავლიდან
union = A | B
# ან: union = A.union(B)
print(union) # {1, 2, 3, 4, 5, 6}
# 2️⃣ გადაკვეთა (Intersection) - მხოლოდ საერთო ელემენტები
intersection = A & B
# ან: intersection = A.intersection(B)
print(intersection) # {3, 4}
# 3️⃣ სხვაობა (Difference) - A-ში არსებული, B-ში არა
difference = A - B
# ან: difference = A.difference(B)
print(difference) # {1, 2}
# 4️⃣ სიმეტრიული სხვაობა - ელემენტები რომლებიც მხოლოდ ერთშია
sym_diff = A ^ B
# ან: sym_diff = A.symmetric_difference(B)
print(sym_diff) # {1, 2, 5, 6}
# 5️⃣ ქვესიმრავლე (Subset)
C = {1, 2}
print(C.issubset(A)) # True - C არის A-ს ქვესიმრავლე
# 6️⃣ ზესიმრავლე (Superset)
print(A.issuperset(C)) # True - A არის C-ს ზესიმრავლე
💡 Set-ის პრაქტიკული გამოყენება¶
# მაგალითი 1: დუბლიკატების ამოღება
emails = ["[email protected]", "[email protected]", "[email protected]", "[email protected]"]
unique_emails = list(set(emails))
print(unique_emails) # უნიკალური ელემენტები
# მაგალითი 2: საერთო მეგობრების პოვნა
ana_friends = {"Gio", "Nika", "Lika"}
gio_friends = {"Ana", "Nika", "Saba"}
common = ana_friends & gio_friends
print(f"საერთო მეგობრები: {common}") # {'Nika'}
# მაგალითი 3: ლუწი რიცხვების გაფილტვრა
numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
odd_numbers = {x for x in numbers if x % 2 != 0}
print(odd_numbers) # {1, 3, 5, 7, 9}
🔶 ლექსიკონი (Dictionary)¶
📌 რა არის Dictionary?¶
Dictionary არის key:value წყვილების კოლექცია - როგორც რეალურ ლექსიკონში სიტყვა-განმარტება.
🔑 ძირითადი მახასიათებლები:¶
✅ Key უნიკალურია - ერთი key ერთი value
✅ Value განმეორებადი - სხვადასხვა key-ს შეიძლება ჰქონდეს ერთი value
✅ Key უცვლადი - უნდა იყოს: string, number, tuple
✅ დალაგებული (Python 3.7+) - ინახავს ელემენტების რიგს
🛠️ Dictionary-ის შექმნა¶
# მარტივი dictionary
student = {
"name": "გიორგი",
"age": 21,
"faculty": "Computer Science",
"grade": 95
}
# ცარიელი dictionary
empty_dict = {}
# ან: empty_dict = dict()
# dict() კონსტრუქტორით
person = dict(name="ანა", age=20, city="თბილისი")
# list-ებიდან dictionary
keys = ["name", "age", "city"]
values = ["ნიკა", 22, "ბათუმი"]
info = dict(zip(keys, values))
print(info) # {'name': 'ნიკა', 'age': 22, 'city': 'ბათუმი'}
🔍 ელემენტებზე წვდომა¶
student = {
"name": "გიორგი",
"age": 21,
"faculty": "IT"
}
# წვდომა key-ით (თუ key არ არსებობს → შეცდომა)
print(student["name"]) # "გიორგი"
# print(student["grade"]) # ❌ KeyError!
# get() მეთოდი (უსაფრთხო, შეცდომას არ იძლევა)
print(student.get("age")) # 21
print(student.get("grade")) # None
print(student.get("grade", 0)) # 0 (default მნიშვნელობა)
✏️ ელემენტების შეცვლა და დამატება¶
student = {"name": "ანა", "age": 20}
# არსებული value-ის შეცვლა
student["age"] = 21
print(student) # {"name": "ანა", "age": 21}
# ახალი key:value-ის დამატება
student["grade"] = 97
student["faculty"] = "Engineering"
print(student)
# {"name": "ანა", "age": 21, "grade": 97, "faculty": "Engineering"}
# რამდენიმე ელემენტის ერთდროულად დამატება
student.update({"city": "თბილისი", "year": 2})
❌ ელემენტების წაშლა¶
student = {
"name": "ნიკა",
"age": 22,
"grade": 88,
"city": "ბათუმი"
}
# del - key-ის წაშლა (თუ არ არსებობს → შეცდომა)
del student["city"]
# pop() - key-ის წაშლა და value-ის დაბრუნება
grade = student.pop("grade")
print(f"წაშლილი ქულა: {grade}")
# popitem() - ბოლო წყვილის წაშლა და დაბრუნება
last = student.popitem()
print(f"ბოლო წყვილი: {last}")
# clear() - სრულად გასუფთავება
student.clear()
print(student) # {}
🔧 Dictionary-ის მეთოდები¶
student = {
"name": "ლიკა",
"age": 20,
"faculty": "Medicine",
"grade": 92
}
# 1️⃣ keys() - ყველა key
keys = student.keys()
print(keys) # dict_keys(['name', 'age', 'faculty', 'grade'])
print(list(keys)) # list-ად გადაყვანა
# 2️⃣ values() - ყველა value
values = student.values()
print(list(values)) # ['ლიკა', 20, 'Medicine', 92]
# 3️⃣ items() - ყველა key:value წყვილი
items = student.items()
for key, value in items:
print(f"{key}: {value}")
# 4️⃣ copy() - dictionary-ის ასლი
student_copy = student.copy()
# 5️⃣ setdefault() - თუ key არ არსებობს, ქმნის მას
student.setdefault("city", "თბილისი")
print(student["city"]) # "თბილისი"
🔁 Dictionary-ით მუშაობა (Loops)¶
prices = {
"ძროხა": 50,
"დათვი": 100,
"ბაჯი": 30,
"ცხვარი": 25
}
# key-ებით გადავლა
for animal in prices:
print(animal)
# key-value წყვილებით გადავლა
for animal, price in prices.items():
print(f"{animal}: {price} ლარი")
# მხოლოდ value-ებით
for price in prices.values():
print(f"ფასი: {price}")
# ფილტრაცია
cheap_animals = {k: v for k, v in prices.items() if v < 40}
print(cheap_animals) # {'ბაჯი': 30, 'ცხვარი': 25}
💡 Dictionary-ის პრაქტიკული გამოყენება¶
# მაგალითი 1: სტუდენტების მონაცემები
students = [
{"name": "ანა", "age": 20, "grade": 95},
{"name": "გიო", "age": 21, "grade": 88},
{"name": "ნიკა", "age": 19, "grade": 92}
]
# სახელების ამოღება
names = [student["name"] for student in students]
print(names)
# საშუალო ქულა
average = sum(s["grade"] for s in students) / len(students)
print(f"საშუალო ქულა: {average}")
# მაგალითი 2: მარაგის მართვა
inventory = {
"ვაშლი": 50,
"ბანანი": 30,
"ფორთოხალი": 45
}
# პროდუქტის დამატება
inventory["კივი"] = 20
# რაოდენობის გაზრდა
inventory["ვაშლი"] += 10
# მინიმალური რაოდენობის პოვნა
min_product = min(inventory, key=inventory.get)
print(f"ყველაზე ცოტა: {min_product} ({inventory[min_product]} ცალი)")
# მაგალითი 3: ორი dictionary-ის გაერთიანება
dict1 = {"a": 1, "b": 2}
dict2 = {"c": 3, "d": 4}
dict1.update(dict2)
print(dict1) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# Python 3.9+
combined = dict1 | dict2
🔄 Set vs Dictionary - შედარება¶
| მახასიათებელი | Set | Dictionary |
|---|---|---|
| სტრუქტურა | ელემენტების კოლექცია | key:value წყვილები |
| სინტაქსი | {1, 2, 3} |
{"a": 1, "b": 2} |
| დუბლიკატები | არ შეიძლება | key-არა, value-კი |
| წვდომა | ელემენტზე პირდაპირ არა | key-ით |
| დალაგება | არა | კი (Python 3.7+) |
| ინდექსაცია | არა | არა (key-ით კი) |
| გამოყენება | ოპერაციები, უნიკალურობა | მონაცემების სტრუქტურირებული შენახვა |
| ცვალებადობა | კი | კი |
🧩 პრაქტიკული ამოცანები¶
📝 Set ამოცანები (1-15)¶
- შექმნა და დამატება: შექმენი set, დაამატე 2 ახალი ელემენტი
- წაშლა remove()-ით: წაშალე ელემენტი
remove()მეთოდით - უსაფრთხო წაშლა: გამოიყენე
discard()ისე, რომ შეცდომა არ მოხდეს - გადაკვეთა: იპოვე ორი set-ის გადაკვეთა
- გაერთიანება: გააერთიანე ორი set
- სხვაობა: იპოვე ორი set-ის სხვაობა
- შემოწმება: შეამოწმე არის თუ არა ელემენტი set-ში
- ფილტრაცია: set-ში ჩაწერე 10 რიცხვი, წაშალე ყველა ლუწი
- სიმეტრიული სხვაობა: იპოვე ორი set-ის სიმეტრიული სხვაობა
- ასლი: შექმენი set-ის ასლი
copy()მეთოდით - დუბლიკატების ამოღება: list-იდან გააკეთე set და ამოიღე დუბლიკატები
- ქვესიმრავლე: შეამოწმე არის თუ არა ერთი set მეორის ქვესიმრავლე
- შემთხვევითი ამოღება: გამოიყენე
pop()ელემენტის ამოსაღებად - გასუფთავება: გაასუფთავე set
clear()მეთოდით - კონვერტაცია: list → set (უნიკალური) → list
📝 Dictionary ამოცანები (16-30)¶
- შექმნა: შექმენი dictionary სტუდენტის შესახებ
- დამატება: დაამატე ახალი ველი "grade"
- შეცვლა: შეცვალე "age" მნიშვნელობა
- წაშლა: წაშალე ერთი key:value წყვილი
- Keys: დაბეჭდე ყველა key
- Values: დაბეჭდე ყველა value
- Items: დაბეჭდე ყველა key:value წყვილი
- მრავალი სტუდენტი: შექმენი 3 სტუდენტის dictionary, დაბეჭდე მხოლოდ სახელები
- საშუალო ფასი: ჩაწერე ნივთები და ფასები, იპოვე საშუალო
- მარაგი: შექმენი საწყობი (პროდუქტი→რაოდენობა)
- განახლება: გაზარდე პროდუქტის რაოდენობა
- მინიმუმი: იპოვე მინიმალური value
- Keys → List: გადაიყვანე keys list-ად
- Values → List: გადაიყვანე values list-ად
- გაერთიანება: გააერთიანე ორი dictionary
update()მეთოდით
✅ პასუხები¶
Set ამოცანები (1-15)¶
# 1. შექმნა და დამატება
s = {1, 2, 3}
s.add(4)
s.add(5)
print(s) # {1, 2, 3, 4, 5}
# 2. წაშლა remove()-ით
s = {1, 2, 3, 4, 5}
s.remove(2)
print(s) # {1, 3, 4, 5}
# 3. უსაფრთხო წაშლა discard()-ით
s.discard(100) # შეცდომა არ ხდება
s.discard(3)
print(s)
# 4. გადაკვეთა
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
intersection = A & B # ან A.intersection(B)
print(intersection) # {3, 4}
# 5. გაერთიანება
union = A | B # ან A.union(B)
print(union) # {1, 2, 3, 4, 5, 6}
# 6. სხვაობა
difference = A - B # ან A.difference(B)
print(difference) # {1, 2}
# 7. შემოწმება
print("x" in s) # False
print(1 in s) # True
# 8. ლუწების წაშლა
numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
odd_only = {x for x in numbers if x % 2 != 0}
print(odd_only) # {1, 3, 5, 7, 9}
# 9. სიმეტრიული სხვაობა
sym_diff = A ^ B # ან A.symmetric_difference(B)
print(sym_diff) # {1, 2, 5, 6}
# 10. ასლის შექმნა
s = {1, 2, 3}
new_s = s.copy()
print(new_s)
# 11. დუბლიკატების ამოღება
my_list = [1, 2, 2, 3, 3, 3, 4]
unique = set(my_list)
print(unique) # {1, 2, 3, 4}
# 12. ქვესიმრავლის შემოწმება
A = {1, 2, 3, 4}
B = {1, 2}
print(B.issubset(A)) # True
print(A.issuperset(B)) # True
# 13. pop() - შემთხვევითი ელემენტის ამოღება
s = {1, 2, 3, 4}
x = s.pop()
print(f"ამოღებულია: {x}")
print(s)
# 14. გასუფთავება
s = {1, 2, 3}
s.clear()
print(s) # set()
# 15. list → set → list
lst = [1, 2, 2, 3, 3, 4]
lst = list(set(lst))
print(lst) # [1, 2, 3, 4]
Dictionary ამოცანები (16-30)¶
# 16. სტუდენტის შექმნა
student = {"name": "ანა", "age": 20}
print(student)
# 17. grade-ის დამატება
student["grade"] = 95
print(student)
# 18. age-ის შეცვლა
student["age"] = 21
print(student)
# 19. წყვილის წაშლა
student.pop("grade")
# ან: del student["grade"]
print(student)
# 20. ყველა key
student = {"name": "გიო", "age": 22, "faculty": "IT"}
print(student.keys()) # dict_keys(['name', 'age', 'faculty'])
print(list(student.keys())) # ['name', 'age', 'faculty']
# 21. ყველა value
print(student.values())
print(list(student.values()))
# 22. ყველა წყვილი
print(student.items())
for key, value in student.items():
print(f"{key}: {value}")
# 23. მრავალი სტუდენტი - მხოლოდ სახელები
students = [
{"name": "გიო", "age": 20},
{"name": "ნიკა", "age": 22},
{"name": "ანა", "age": 21}
]
names = [s["name"] for s in students]
print(names) # ['გიო', 'ნიკა', 'ანა']
# 24. საშუალო ფასი
prices = {"რძე": 3, "პური": 2, "ყველი": 8}
avg = sum(prices.values()) / len(prices)
print(f"საშუალო ფასი: {avg:.2f}") # 4.33
# 25. საწყობის შექმნა
store = {"ვაშლი": 10, "ბანანი": 20}
print(store)
# 26. რაოდენობის გაზრდა
store["ვაშლი"] += 5
print(store) # {"ვაშლი": 15, "ბანანი": 20}
# 27. მინიმალური value
min_value = min(store.values())
print(f"მინიმალური რაოდენობა: {min_value}")
# 28. keys → list
keys_list = list(store.keys())
print(keys_list)
# 29. values → list
values_list = list(store.values())
print(values_list)
# 30. ორი dictionary-ის გაერთიანება
dict1 = {"a": 1, "b": 2}
dict2 = {"c": 3, "d": 4}
dict1.update(dict2)
print(dict1) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# ან Python 3.9+:
# combined = dict1 | dict2
🎯 დამატებითი რჩევები¶
Set-ისთვის:¶
- გამოიყენე დუბლიკატების ამოსაღებად list-იდან
- იდეალურია ელემენტების არსებობის სწრაფი შესამოწმებლად
- მათემატიკური ოპერაციები (გადაკვეთა, გაერთიანება) ძალიან სწრაფია
Dictionary-ისთვის:¶
- იდეალურია სტრუქტურირებული მონაცემებისთვის
- გამოიყენე მონაცემთა დაჯგუფებისთვის და დათვლისთვის
get()უსაფრთხოა,[]უფრო პირდაპირი
📚 დამატებითი რესურსები¶
- Python Official Documentation - Sets
- Python Official Documentation - Dictionaries
- Real Python - Sets Tutorial
- Real Python - Dictionaries Tutorial
🚀