Struktur Data Python : Dictionary

Tutorial struktur data python dictionaries

[tutorial ini dibuat menggunakan python versi 3.11]

Dictionary adalah struktur data untuk menyimpan informasi dalam bentuk pasangan kunci-nilai (key-value). Key berfungsi sebagai identifikasi unik untuk setiap value yang disimpan. Dictionary banyak digunakan untuk memetakan dan mengorganisir data dalam Python termasuk mengelola data dari Web API yang umumnya dalam format JSON. Di dalam python Format JSON akan diproses sebagai dictionary.

Dictionary bersifat mutable yang berarti dapat dilakukan operasi penambahan, penghapusan dan manipulasi pasangan key-value. Key dalam dictionary harus bersifat hashable, dan dapat berupa objek apa pun, namun yang paling umum adalah string, int dan tuple. Tidak ada urutan tertentu dalam dictionary, sehingga elemen-elemennya tidak selalu dikembalikan dalam urutan yang sama seperti saat dimasukkan.

Membuat Dictionary

Dictionary pada python ditandai dengan kurung kurawal diikuti dengan nama key dan nilainya dengan format {key_1 : value_1, key_2 : value_2, ...}. Tipe data dictionary di dalam python adalah dict. Sehingga objek dictionary juga dapat dibuat melalui inisiasi kelas dict.

Berikut ini beberapa contoh pembuatan objek dict pada python:

Kode

# membuat dict dengan {...}
pikachu = {
    "name": "Pikachu",
    "type": "Electric",
    "hp": 35,
}

print(pikachu)


# membuat dict dengan inisiasi kelas dict
charmander = dict(
    name="Charmander",
    type="Fire",
    hp=39,
)

print(charmander)


# membuat dict dengan konversi dari list/set/tuple
bulba_list = [
    ("name", "Bulbasaur"),
    ("type", "Grass/Poisson"),
    ("hp", 45),
]
bulbasaur = dict(bulba_list)

print(bulbasaur)
# OUTPUT

{'name': 'Pikachu', 'type': 'Electric', 'hp': 35}
{'name': 'Charmander', 'type': 'Fire', 'hp': 39}
{'name': 'Bulbasaur', 'type': 'Grass/Poisson', 'hp': 45}

Seperti halnya struktur data lainnya pada python, value di dalam dictionary juga dapat menyimpan tipe data apa saja, mulai dari numerik, string, bahkan list dan dictionary lainnya. Oleh karena itu, sebuah dictionary dapat memiliki struktur yang bersarang.

Berikut adalah contoh dictionary dengan struktur bersarang:

Kode

charizard = {
    "name": "Charizard",
    "type": ["Fire", "Flying"],
    "height": 1.7,
    "weight": 90.5,
    "stats": {
        "HP": 78,
        "attack": 84,
        "defense": 78,
        "speed": 100,
        "total": 364,
        "special": {"sp.attack": 109, "sp.defense": 85},
    },
}

Pada contoh ini, objek charizard memiliki struktur yang cukup kompleks. Terdapat 5 pasangan key-value yaitu name, type, height, weight dan stats. Key name memiliki nilai dengan tipe string, key height dan weight memiliki nilai dengan tipe float, sementara itu untuk type dan stats memiliki tipe data berupa list dan dict. Lebih jauh lagi, nilai pada key stats merupakan sebuah dictionary dengan 6 key-value. Lima diantaranya memiliki tipe int dan 1 lainnya, yaitu special merupakan dictionary lainnya dengan dua key-value.

Membaca Item dalam Dictionary

Nilai-nilai dari dictionary dapat diakses dengan key yang dimiliki. Terdapat dua cara dalam penerapannya, yaitu dengan kurung siku [key] atau dengan metode get(key). Perbedaan dua cara ini adalah pada output yang diberikan ketika key yang diberikan tidak eksis. Pemanggilan menggunakan [key] akan menghasilkan error KeyError dan dapat menghentikan program yang berjalan. Adapun menggunakan get(key) akan mengembalikan nilai None jika key tidak eksis.

Mengakses nilai menggunakan key akan mengembalikan objek sesuai dengan tipe data nilai tersebut. Oleh karena itu, jika nilai suatu key bertipe list, maka nilai yang diperoleh dapat diproses lagi seperti list pada umumnya. Begitu pula jika nilainya berupa dictionary maka dapat kita akses lebih dalam menggunakan pasangan key-value-nya.

Kode

# mengakses key "name"
name = charizard["name"]
height = charizard["height"]

print(f"{name} memiliki tinggi {height} meter")


# mengakses key "type"
types = charizard["type"]
print(f"{name} adalah pokemon {types}")

# karena menghasilkan list
# maka dapat diakses seperti list umumnya
# contoh : mengambil tipe pertama
type_1 = charizard["type"][0]
print(f"{name} adalah tipe {type_1}")


# mengakses stats
stats = charizard["stats"]
print(f"Statistik {name} : {stats}")

# mengkases nilai attack
attack = charizard["stats"]["attack"]
print(f"{name} memiliki attack sebesar {attack}")

# mengkases spesial defence
sp_def = charizard["stats"]["special"]["sp.defense"]
print(f"{name} memiliki sp. defense sebesar {sp_def}")


# mengakses key yang tidak eksis

# menggunakan get akan menghasilkan None
species = charizard.get("species")
print(f"{name} merupakan spesies {species}")

# menggunakan [] akan terjadi Error
species = charizard["species"]                
# OUTPUT

Charizard memiliki tinggi 1.7 meter
Charizard adalah pokemon ['Fire', 'Flying']
Charizard adalah tipe Fire
Statistik Charizard : {'HP': 78, 'attack': 84, 'defense': 78, ...}
Charizard memiliki attack sebesar 84
Charizard memiliki sp. defense sebesar 85
Charizard merupakan spesies None

Key-value dalam sebuah dictionary dapat juga diakses secara iteratif menggunakan for loop. Terdapat dua cara yang dapat digunakan yaitu secara langsung dengan objek dict nya atau dengan mengakses metode items pada objek tersebut. ierasi menggunakan objek dict akan mengembalikan key pada setiap iterasinya, sementara menggunakan metode items kita dapat mengiterasi key dan value sekaligus tanpa harus mengakses objek dictionary-nya lagi.

Kode

pokemon = {
    "Pikachu": "Electric",
    "Charmander": "Fire",
    "Bulbasaur": "Grass",
    "Squirtle": "Water",
}


# iterasi dengan key
# nama key dapat diganti apapun
for key in pokemon:
    print(f"{key} : {pokemon[key]}")      # akses value dengan pokemon[key]


print("------------------")


# iterasi dengan key dan value
# nama key & value dapat diganti apapun
for key, value in pokemon.items():        # akses value langsung
    print(f"{key} : {value}")
# OUTPUT

Pikachu : Electric
Charmander : Fire
Bulbasaur : Grass
Squirtle : Water
------------------
Pikachu : Electric
Charmander : Fire
Bulbasaur : Grass
Squirtle : Water

Manipulasi dan Menambah Item

Manipulasi data dictionary dapat dilakukan dengan cara yang sama seperti cara mengaksesnya. Cukup dengan memberikan nilai baru pada key yang diinginkan. Cara ini juga dapat berlaku untuk menambah key baru jika key tersebut tidak eksis pada dictionary.

Pada contoh berikut ini dilakukan perubahan beberapa item pada objek charizard yaitu name, type, attack dan sp.attack. Selain itu ditambahkan juga item baru dengan key species dan nilai "Flame Pokemon".

Kode

# merubah nilai untuk ke name
charizard["name"] = "Mega Charizard X"

# menambah type "Dragon"
charizard["type"].append("Dragon")       # menambah elemen pada list

# merubah nilai attack
charizard["stats"]["attack"] = 130

# merubah sp. attack
charizard["stats"]["special"]["sp.attack"] = 130

# menambah key baru yang belum ada
charizard["species"] = "Flame Pokemon"

print(charizard)
# OUTPUT

# note : secara default output akan dicetak dalam 1 baris

{
    'name': 'Mega Charizard X', 
    'type': ['Fire', 'Flying', 'Dragon'], 
    'height': 1.7, 
    'weight': 90.5, 
    'stats': {
        'HP': 78, 
        'attack': 130, 
        'defense': 78, 
        'speed': 100, 
        'total': 364, 
        'special': {'sp.attack': 130, 'sp.defense': 85}}, 
    'species': 'Flame Pokemon'
}

Menghapus Item

Item pada dictionary dapat dihapus menggunakan dua cara yaitu melalui keyword del dan metode pop. Penghapusan dengan metode pop akan mengembalikan item yang dihapus, artinya nilai yang akan dihapus dapat disimpan ke variabel jika diperlukan.

Pada contoh berikut, dilakukan penghapusan terhadap item dengan key "stats" menggunakan keyword del. Setelah proses ini dapat dilihat bahwa objek charizard tidak lagi memiliki key stats.

Selanjutnya dilakukan penghapusan pada item "type" menggunakan metode pop. hasil dari metode ini disimpan pada variabel popped_item. Proses ini membuat objek charizard tidak lagi memiliki item "type". Namun item tersebut masih dapat diakses karena disimpan pada variabel popped_item.

Kode

# menghapus key 'stats'
del charizard["stats"]
print("Charizard tanpa stats :\n")
print(charizard)

print("\n------------------------------\n")

# menghapus dengan pop
# mengembalikan nilai key yang dihapus
# dapat disimpan pada variabel
popped_item = charizard.pop("type")
print(f"item yang dihapus : {popped_item}\n")
print(charizard)
# OUTPUT

Charizard tanpa stats :

{'name': 'Mega Charizard X', 'type': ['Fire', 'Flying', 'Dragon'], 'height': 1.7, 'weight': 90.5, 'species': 'Flame Pokemon'}

------------------------------

item yang dihapus : ['Fire', 'Flying', 'Dragon']

{'name': 'Mega Charizard X', 'height': 1.7, 'weight': 90.5, 'species': 'Flame Pokemon'}

Menggabung Dictionary

Dua dictionary dapat digabungkan menggunakan metode dict_1.update(dict_2). Metode ini akan menambahkan atau memperbarui item dari dictionary yang memanggil (dict_1). Jika terdapat key yang sama pada dua dictionary maka data yang lama akan diupdate menggunakan nilai dari dictionary yang ditambahkan.

Berikut ini disajikan contoh-contoh penggabungan dua dictionary. Pada contoh pertama,dictionary yang digabungkan tidak memiliki key yang sama. Sementara itu pada contoh kedua, objek bulbasaur memiliki key hp dengan nilai 0 dan pada dictionary bulbasaur_stats juga terdapat key yang sama dengan nilai 45. Oleh karena itu, saat objek bulbasaur diupdate dengan objek bulbasaur_stats, nilai untuk key hp akan diupdate mengikuti nilai bulbasaur_stats yaitu 45.

Kode

# update dictionary
pikachu = {
    "name": "Pikachu",
    "type": "Electric",
    "hp": 35,
}

print(f"Data Pikachu : {pikachu}")

pikachu_stats = {
    "attack": 55, 
    "defense": 40,  
    "speed": 90
}

# update pikachu
pikachu.update(pikachu_stats)
print(f"Data Pikachu (upd) : {pikachu}")


print("\n------------------------\n")


# update jika terdapat key sama
bulbasaur = {
    "name": "Bulbasaur",
    "type": "Poisson",
    "hp": 0,
}
print(f"Data Bulbasaur : {bulbasaur}")

bulbasaur_stats = {
    "hp": 45,
    "attack": 49,
    "defense": 49,
    "speed": 45,
}

# update bulbasaur
bulbasaur.update(bulbasaur_stats)
print(f"Data Bulbasaur (upd) : {bulbasaur}")
# OUTPUT

Data Pikachu : {'name': 'Pikachu', 'type': 'Electric', 'hp': 35}
Data Pikachu (upd) : {'name': 'Pikachu', 'type': 'Electric', 'hp': 35, 'attack': 55, 'defense': 40, 'speed': 90}

------------------------

Data Bulbasaur : {'name': 'Bulbasaur', 'type': 'Poisson', 'hp': 0}
Data Bulbasaur (upd) : {'name': 'Bulbasaur', 'type': 'Poisson', 'hp': 45, 'attack': 49, 'defense': 49, 'speed': 45}

Ringkasan

Pada bagian ini kita sudah mempelajari struktur data dictionary pada python. Dictionary merupakan struktur data berupa pasangan key-value. Item pada dictionary dapat diakses menggunakan key yang bersesuaian atau dapat juga dilakukan iterasi untuk mengakses setiap item pada dictionary tersebut.Dictionary bersifat mutable sehingga dapat dilakukan operasi penambahan, penghapusan serta update data termasuk menggabungkan item-item dari dua dictionary.

Selanjutnya : Bekerja dengan Fungsi

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

Daftar Isi