Կարող եք ձեր կոդը փորձարկել այստեղ
Python-ի բառարանը պահպանում է տարրերի հավաքածու, որտեղ յուրաքանչյուր տարր ունի յուրահատուկ բանալի և դրա հետ կապված արժեք:
Բառարանի սահմանումն ունի հետևյալ շարահյուսությունը.
dictionary = { key1:value1, key2:value2, ....}
Գանգուր փակագծերում սահմանվում է տարրերի հաջորդականություն՝ բաժանված ստորակետերով, որտեղ յուրաքանչյուր տարրի համար նախ նշվում է բանալին և նշվում է դրա արժեքը՝ առանձնացված երկու կետով:
Եկեք սահմանենք բառարան.
users = {1: "Tom", 2: "Bob", 3: "Bill"}
Օգտատերերի բառարանն օգտագործում է թվերը որպես բանալիներ, իսկ տողերը՝ որպես արժեքներ: Այսինքն՝ 1 բանալիով տարրն ունի «Թոմ» արժեք, 2 բանալիով տարրը՝ «Բոբ» արժեքը և այլն։
Մեկ այլ օրինակ.
emails = {"tom@gmail.com": "Tom", "bob@gmai.com": "Bob", "sam@gmail.com": "Sam"}
Էլփոստի բառարանը օգտագործում է տողեր՝ օգտվողի էլ. հասցեներ, որպես բանալիներ, և տողեր՝ օգտվողի անուններ՝ որպես արժեքներ:
Բայց պարտադիր չէ, որ ստեղները և տողերը լինեն նույն տեսակի: Նրանք կարող են ներկայացնել տարբեր տեսակներ.
objects = {1: "Tom", "2": True, 3: 100.6}
Մենք կարող ենք նաև ընդհանուր առմամբ սահմանել դատարկ բառարան առանց տարրերի.
objects = {}
կամ այսպես.
objects = dict()
Ցուցակները և բազմապատիկները բառարանի վերածելը
Չնայած այն հանգամանքին, որ բառարանը և ցուցակը կառուցվածքով տարբեր տեսակներ են, այնուամենայնիվ, ցուցակների որոշ տեսակների համար հնարավոր է դրանք վերածել բառարանի, օգտագործելով ներկառուցված dict() ֆունկցիան : Դա անելու համար ցուցակը պետք է պահպանի ներդիր ցուցակների մի շարք: Յուրաքանչյուր ներդիր ցուցակ պետք է բաղկացած լինի երկու տարրից. երբ վերածվում է բառարանի, առաջին տարրը կդառնա բանալին, իսկ երկրորդը կդառնա արժեքը.
users_list = [
["+111123455", "Tom"],
["+384767557", "Bob"],
["+958758767", "Alice"]
]
users_dict = dict(users_list)
print(users_dict) # {"+111123455": "Tom", "+384767557": "Bob", "+958758767": "Alice"}
Նմանապես, դուք կարող եք երկչափ բազմոցները վերածել բառարանի, որն իր հերթին պարունակում է երկու տարրերից բաղկացած բազմություններ.
users_tuple = (
("+111123455", "Tom"),
("+384767557", "Bob"),
("+958758767", "Alice")
)
users_dict = dict(users_tuple)
print(users_dict)
Էլեմենտների ստացում և փոփոխություն
Բառարանի տարրեր մուտք գործելու համար քառակուսի փակագծերում իր անունից հետո նշվում է տարրի ստեղնը՝
dictionary[ключ]
Օրինակ, եկեք ստանանք և փոխենք բառարանի տարրերը.
users = {
"+11111111": "Tom",
"+33333333": "Bob",
"+55555555": "Alice"
}
print(users["+11111111"]) # Tom
users["+33333333"] = "Bob Smith"
print(users["+33333333"]) # Bob Smith
Եթե նման բանալիով տարրի արժեքը սահմանելիս այն չկա բառարանում, կավելացվի.
users["+4444444"] = "Sam"
Բայց եթե մենք փորձենք արժեք ստանալ բառարանում չգտնվող բանալիով, Python-ը կստեղծի KeyError.
user = users["+4444444"] # KeyError
Եվ այս իրավիճակը կանխելու համար, նախքան որևէ տարր մուտք գործելը, մենք կարող ենք ստուգել բառարանում բանալիի առկայությունը՝ օգտագործելով բառարանում բառի բանալին : Եթե բանալին բառարանում է, ապա այս արտահայտությունը վերադարձնում է True:
key = "+4444444"
if key in users:
user = users[key]
print(user)
else:
print("element not found")
Դուք կարող եք նաև օգտագործել get մեթոդը տարրեր ստանալու համար, որն ունի երկու ձև.
get(key): բառարանից վերադարձնում է տարրը բանալին բանալին: Եթե նման բանալիով տարր չկա, այն վերադարձնում է None արժեքը
get(key, default): բառարանից վերադարձնում է տարրը բանալին բանալին: Եթե նման բանալիով տարր չկա, այն վերադարձնում է լռելյայն արժեքը
users = {
"+11111111": "Tom",
"+33333333": "Bob",
"+55555555": "Alice"
}
user1 = users.get("+55555555")
print(user1) # Alice
user2 = users.get("+33333333", "Unknown user")
print(user2) # Bob
user3 = users.get("+44444444", "Unknown user")
print(user3) # Unknown user
Հեռացում
Տարրը բանալիով հեռացնելու համար օգտագործեք del օպերատորը.
users = {
"+11111111": "Tom",
"+33333333": "Bob",
"+55555555": "Alice"
}
del users["+55555555"]
print(users) # { "+11111111": "Tom", "+33333333": "Bob"}
Բայց արժե հաշվի առնել, որ եթե նման բանալի չկա բառարանում, բացառություն կհայտնվի KeyError: Հետևաբար, կրկին, նախքան ջնջելը, նպատակահարմար է այս բանալիով ստուգել տարրի առկայությունը:
users = {
"+11111111": "Tom",
"+33333333": "Bob",
"+55555555": "Alice"
}
key = "+55555555"
if key in users:
del users[key]
print(f"{key} removed")
else:
print("element not found")
Հեռացնելու մեկ այլ եղանակ է pop() մեթոդը : Այն ունի երկու ձև.
pop(key): հեռացնում է տարրը բանալիով և վերադարձնում հեռացված տարրը: Եթե այս բանալիով տարր չկա, բացառություն է բացվում KeyError
pop(key, default): հեռացնում է տարրը բանալիով և վերադարձնում հեռացված տարրը: Եթե այս բանալիով տարր չկա, ապա վերադարձվում է լռելյայն արժեքը
users = {
"+11111111": "Tom",
"+33333333": "Bob",
"+55555555": "Alice"
}
key = "+55555555"
user = users.pop(key)
print(user) # Alice
user = users.pop("+4444444", "Unknown user")
print(user) # Unknown user
Եթե Ձեզ անհրաժեշտ է հեռացնել բոլոր տարրերը, ապա այս դեպքում կարող եք օգտագործել clear() մեթոդը.
users.clear()
Բառարանների պատճենում և միաձուլում
copy() մեթոդը պատճենում է բառարանի բովանդակությունը՝ վերադարձնելով նոր բառարան.
users = {"+1111111": "Tom", "+3333333": "Bob", "+5555555": "Alice"}
students = users.copy()
print(students) # {"+1111111": "Tom", "+3333333": "Bob", "+5555555": "Alice"}
Update() մեթոդը միավորում է երկու բառարան.
users = {"+1111111": "Tom", "+3333333": "Bob"}
users2 = {"+2222222": "Sam", "+6666666": "Kate"}
users.update(users2)
print(users) # {"+1111111": "Tom", "+3333333": "Bob", "+2222222": "Sam", "+6666666": "Kate"}
print(users2) # {"+2222222": "Sam", "+6666666": "Kate"}
Այս դեպքում users2 բառարանը մնում է անփոփոխ։ Փոխվում է միայն օգտվողների բառարանը, որին ավելացվում են մեկ այլ բառարանի տարրեր։ Բայց եթե անհրաժեշտ է, որ երկու աղբյուրի բառարաններն էլ մնան անփոփոխ, և միաձուլման արդյունքը լինի ինչ-որ երրորդ բառարան, ապա կարող եք նախ պատճենել մի բառարանը մյուսին.
users3 = users.copy()
users3.update(users2)
Բառարանի որոնում
Բառարանի միջոցով կրկնելու համար կարող եք օգտագործել for loop.
users = {
"+11111111": "Tom",
"+33333333": "Bob",
"+55555555": "Alice"
}
for key in users:
print(f"Phone: {key} User: {users[key]} ")
Տարրերի վրա կրկնելիս մենք ստանում ենք ընթացիկ տարրի բանալին և դրանից կարող ենք ստանալ հենց տարրը:
Նյութերի վրա կրկնելու մեկ այլ միջոց է օգտագործել items () մեթոդը.
users = {
"+11111111": "Tom",
"+33333333": "Bob",
"+55555555": "Alice"
}
for key, value in users.items():
print(f"Phone: {key} User: {value} ")
Մեթոդը items() վերադարձնում է բազմակի մի շարք: Յուրաքանչյուր tuple պարունակում է տարրի բանալին և արժեքը, որը, երբ կրկնվում է, մենք անմիջապես կարող ենք մուտք գործել հիմնական և արժեքային փոփոխականներ:
Կան նաև ստեղների և արժեքների թվարկման առանձին տարբերակներ։ Ստեղների վրա կրկնելու համար մենք կարող ենք բառարանում զանգահարել keys() մեթոդը.
for key in users.keys():
print(key)
Ճիշտ է, թվարկման այս մեթոդը իմաստ չունի, քանի որ նույնիսկ առանց keys() մեթոդը կանչելու մենք կարող ենք թվարկել ստեղները, ինչպես ցույց է տրված վերևում։
Միայն արժեքների վրա կրկնելու համար մենք կարող ենք զանգահարել values() մեթոդը բառարանում.
for value in users.values():
print(value)
Բարդ բառարաններ
Բացի ամենապարզ առարկաներից, ինչպիսիք են թվերը և տողերը, բառարանները կարող են պահել նաև ավելի բարդ առարկաներ՝ նույն ցուցակները, կրկնակները կամ այլ բառարաններ.
users = {
"Tom": {
"phone": "+971478745",
"email": "tom12@gmail.com"
},
"Bob": {
"phone": "+876390444",
"email": "bob@gmail.com",
"skype": "bob123"
}
}
Այս դեպքում բառարանի յուրաքանչյուր տարրի արժեքն իր հերթին ներկայացնում է առանձին բառարան։
Ներդրված բառարանի տարրեր մուտք գործելու համար դուք պետք է օգտագործեք երկու բանալի.
old_email = users["Tom"]["email"]
users["Tom"]["email"] = "supertom@gmail.com"
print(users["Tom"]) # { phone": "+971478745", "email": "supertom@gmail.com }
Բայց եթե մենք փորձենք արժեք ստանալ բառարանում չգտնվող բանալիից, Python-ը բացառություն կանի KeyError.
tom_skype = users["Tom"]["skype"] # KeyError
Այս սխալից խուսափելու համար կարող եք ստուգել բառարանում բանալիի առկայությունը.
key = "skype"
if key in users["Tom"]:
print(users["Tom"]["skype"])
else:
print("skype is not found")
Կամ կարող եք օգտագործել get() մեթոդը.
users = {
"Tom": {
"phone": "+971478745",
"email": "tom12@gmail.com"
}
}
tom_skype = users["Tom"].get("skype", "Undefined")
print(tom_skype) # Undefined
Մեկնաբանություն գրելու համար խնդրում ենք մուտք լինել