Saya memiliki kamus di bawah ini:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
Bagaimana cara mengindeks entri pertama dalam kamus?
colors[0]
akan mengembalikan KeyError
untuk alasan yang jelas.
python
dictionary
indexing
Harpal
sumber
sumber
Jawaban:
Kamus tidak diurutkan dalam versi Python hingga dan termasuk Python 3.6. Jika Anda tidak peduli dengan urutan entri dan tetap ingin mengakses kunci atau nilai menurut indeks, Anda dapat menggunakan
d.keys()[i]
dand.values()[i]
ataud.items()[i]
. (Perhatikan bahwa metode ini membuat daftar semua kunci, nilai, atau item dengan Python 2.x. Jadi jika Anda membutuhkannya lebih dari sekali, simpan daftar dalam variabel untuk meningkatkan kinerja.)Jika Anda benar-benar peduli dengan urutan entri, mulai dengan Python 2.7 Anda dapat menggunakan
collections.OrderedDict
. Atau gunakan daftar pasanganl = [("blue", "5"), ("red", "6"), ("yellow", "8")]
jika Anda tidak membutuhkan akses dengan kunci. (Ngomong-ngomong, mengapa nomor Anda berdering?)
Di Python 3.7, kamus normal disusun, jadi Anda tidak perlu menggunakan
OrderedDict
lagi (tapi Anda masih bisa - pada dasarnya tipe yang sama). Implementasi CPython dari Python 3.6 sudah termasuk perubahan itu, tetapi karena itu bukan bagian dari spesifikasi bahasa, Anda tidak dapat mengandalkannya di Python 3.6.sumber
d.iterkeys().next()
bukand.keys()[0]
untuk memeriksa salah satu kunci tanpa menghapusnya. Jika kamusnya sangat besar, itu akan membuat perbedaan besar dalam hal kinerja. Hal yang sama berlaku untuk nilai dan item. Di Python 2.7 Anda juga dapat menggunakan objek tampilan dictJika ada yang masih melihat pertanyaan ini, jawaban yang diterima saat ini sudah usang:
Sejak Python 3.7 * kamus-kamusnya menjaga urutan , yaitu mereka sekarang berperilaku persis seperti
collections.OrderedDict
dulu. Sayangnya, masih belum ada metode khusus untuk mengindeks kekeys()
/values()
dari kamus, jadi mendapatkan kunci / nilai pertama dalam kamus dapat dilakukan sepertifirst_key = list(colors)[0] first_val = list(colors.values())[0]
atau sebagai alternatif (ini untuk menghindari membuat tampilan kunci menjadi daftar):
def get_first_key(dictionary): for key in dictionary: return key raise IndexError first_key = get_first_key(colors) first_val = colors[first_key]
Jika Anda membutuhkan
n
kunci -th, maka sama sajadef get_nth_key(dictionary, n=0): if n < 0: n += len(dictionary) for i, key in enumerate(dictionary.keys()): if i == n: return key raise IndexError("dictionary index out of range")
(* CPython 3.6 sudah termasuk dicts terurut, tapi ini hanya detail implementasi. Spesifikasi bahasa termasuk dicts terurut dari 3.7 dan seterusnya.)
sumber
Mengatasi elemen kamus seperti duduk di atas keledai dan menikmati perjalanan.
Aturan Python DICTIONARY tidak beraturan
Jika ada
dic = {1: "a", 2: "aa", 3: "aaa"}
Sekarang misalkan jika saya pergi seperti
dic[10] = "b"
, maka itu tidak akan selalu menambahkan seperti inidic = {1:"a",2:"aa",3:"aaa",10:"b"}
Mungkin seperti itu
dic = {1: "a", 2: "aa", 3: "aaa", 10: "b"}
Atau
dic = {1: "a", 2: "aa", 10: "b", 3: "aaa"}
Atau
dic = {1: "a", 10: "b", 2: "aa", 3: "aaa"}
Atau kombinasi semacam itu.
Jadi aturan jempol adalah KAMUS tidak teratur !
sumber
Jika Anda membutuhkan kamus yang teratur, Anda dapat menggunakan odict .
sumber
sebenarnya saya menemukan solusi baru yang sangat membantu saya, Jika Anda sangat peduli dengan indeks nilai tertentu dalam daftar atau kumpulan data, Anda dapat menetapkan nilai kamus ke Indeks itu !:
Hanya melihat:
list = ['a', 'b', 'c'] dictionary = {} counter = 0 for i in list: dictionary[i] = counter counter += 1 print(dictionary) # dictionary = {'a':0, 'b':1, 'c':2}
Sekarang melalui kekuatan hashmaps Anda dapat menarik indeks entri Anda dalam waktu yang konstan (alias jauh lebih cepat)
sumber
oh, itu yang sulit. Apa yang Anda miliki di sini, pada dasarnya, adalah dua nilai untuk setiap item. Kemudian Anda mencoba memanggil mereka dengan nomor sebagai kuncinya. Sayangnya, salah satu nilai Anda telah ditetapkan sebagai kuncinya!
Coba ini:
colors = {1: ["blue", "5"], 2: ["red", "6"], 3: ["yellow", "8"]}
Sekarang Anda dapat memanggil kunci dengan nomor seolah-olah mereka diindeks seperti daftar. Anda juga dapat merujuk warna dan nomor dengan posisinya di dalam daftar.
Sebagai contoh,
colors[1][0] // returns 'blue' colors[3][1] // returns '8'
Tentu saja, Anda harus menemukan cara lain untuk melacak lokasi tiap warna. Mungkin Anda bisa memiliki kamus lain yang menyimpan kunci setiap warna sebagai nilainya.
Kemudian, Anda juga dapat mencari kunci warna jika perlu.
colors [colors_key ['blue']] [0] akan menghasilkan 'blue'
Sesuatu seperti itu.
Dan kemudian, saat Anda melakukannya, Anda dapat membuat dikt dengan nilai angka sebagai kunci sehingga Anda selalu dapat menggunakannya untuk mencari warna Anda, jika perlu.
Kemudian, (colors [colors_key [nilai [5] [1]]] [0]) akan mengembalikan 'biru'.
Atau Anda bisa menggunakan daftar daftar.
Semoga berhasil!
sumber
Anda tidak bisa, karena
dict
tidak berurutan. Anda dapat menggunakan.popitem()
untuk mendapatkan item arbitrer, tetapi itu akan menghapusnya dari dict.sumber
next(iter(d.items()))
(.iteritems()
dengan Python 2) memberi Anda item arbitrer juga (sama dalam pengujian saya, yang masuk akal karena popitem dapat diimplementasikan menggunakan ini) tetapi tidak akan menghapus item tersebut.