Jika a mydicttidak kosong, saya mengakses elemen sewenang-wenang sebagai:
mydict[mydict.keys()[0]]
Apakah ada cara yang lebih baik untuk melakukan ini?
list(mydict.keys())[0].
Jika a mydicttidak kosong, saya mengakses elemen sewenang-wenang sebagai:
mydict[mydict.keys()[0]]
Apakah ada cara yang lebih baik untuk melakukan ini?
list(mydict.keys())[0].
Jawaban:
Pada Python 3, non-destruktif dan berulang:
next(iter(mydict.values()))
Pada Python 2, non-destruktif dan berulang:
mydict.itervalues().next()
Jika Anda ingin berfungsi dalam Python 2 dan 3, Anda bisa menggunakan sixpaket:
six.next(six.itervalues(mydict))
meskipun pada titik ini cukup samar dan saya lebih suka kode Anda.
Jika Anda ingin menghapus item apa pun, lakukan:
key, value = mydict.popitem()
Perhatikan bahwa "pertama" mungkin bukan istilah yang sesuai di sini karena dictbukan tipe yang diurutkan dalam Python <3.6. Python 3.6+ dictsdipesan.
dict.iterkeys().next()?
dict.values().__iter__().__next__():)
key, value = dict(d).popitem()
Jika Anda hanya perlu mengakses satu elemen (menjadi yang pertama secara kebetulan, karena dikt tidak menjamin pemesanan) Anda cukup melakukan ini di Python 2 :
my_dict.keys()[0] -> key of "first" element
my_dict.values()[0] -> value of "first" element
my_dict.items()[0] -> (key, value) tuple of "first" element
Harap perhatikan bahwa (setahu saya) Python tidak menjamin bahwa 2 panggilan berurutan ke salah satu metode ini akan menghasilkan daftar dengan urutan yang sama. Ini tidak didukung dengan Python3.
dalam Python 3 :
list(my_dict.keys())[0] -> key of "first" element
list(my_dict.values())[0] -> value of "first" element
list(my_dict.items())[0] -> (key, value) tuple of "first" element
list(my_dict.keys())[0]
list(my_dict.keys())[0]bukan malas?
Dalam python3, Caranya:
dict.keys()
mengembalikan nilai dalam tipe: dict_keys (), kami akan mendapatkan kesalahan ketika mendapat anggota pertama kunci dict dengan cara ini:
dict.keys()[0]
TypeError: 'dict_keys' object does not support indexing
Akhirnya, saya mengonversi dict.keys () ke list @ 1st, dan mendapat anggota pertama dengan metode splice list:
list(dict.keys())[0]
list(dict.values())[0].
next(iter(mydict))
next(iter(mydict.values()))
next(iter(mydict.items())) # or next(iter(mydict.viewitems())) in python 2
Dua yang pertama adalah Python 2 dan 3. Dua yang terakhir malas di Python 3, tetapi tidak dalam Python 2.
Seperti yang disebutkan lainnya, tidak ada "item pertama", karena kamus tidak memiliki urutan jaminan (mereka diimplementasikan sebagai tabel hash). Jika Anda ingin, misalnya, nilai yang sesuai dengan kunci terkecil, thedict[min(thedict)]akan melakukannya. Jika Anda peduli tentang urutan di mana kunci dimasukkan, yaitu, dengan "pertama" yang Anda maksudkan "dimasukkan paling awal", maka dalam Python 3.1 Anda dapat menggunakan collections.OrderedDict , yang juga dalam Python 2.7 yang akan datang; untuk versi Python yang lebih lama, unduh, instal, dan gunakan perintah dict backport (2.4 dan yang lebih baru) yang dapat Anda temukan di sini .
Python 3.7 Sekarang dikt adalah perintah penyisipan.
Bagaimana dengan ini. Belum disebutkan di sini.
py 2 & 3
a = {"a":2,"b":3}
a[list(a)[0]] # the first element is here
>>> 2
dict.values()mengembalikan tampilan, jadi seharusnya O (1). list(a)mengembalikan daftar baru, jadi akan menjadi O (n).
Mengabaikan masalah seputar pemesanan dikt, mungkin ini lebih baik:
next(dict.itervalues())
Dengan cara ini kami menghindari pencarian item dan membuat daftar kunci yang tidak kami gunakan.
next(iter(dict.values()))
next(iter(dict.values()))mendapatkan hasil yang sama tanpa membuat daftar.
Dalam python3
list(dict.values())[0]
Anda selalu dapat melakukan:
for k in sorted(d.keys()):
print d[k]
Ini akan memberi Anda serangkaian kunci yang diurutkan secara konsisten (terkait dengan builtin .hash () saya kira) yang dapat Anda proses jika penyortiran memiliki arti bagi Anda. Itu berarti misalnya tipe numerik diurutkan secara konsisten bahkan jika Anda memperluas kamus.
CONTOH
# lets create a simple dictionary
d = {1:1, 2:2, 3:3, 4:4, 10:10, 100:100}
print d.keys()
print sorted(d.keys())
# add some other stuff
d['peter'] = 'peter'
d['parker'] = 'parker'
print d.keys()
print sorted(d.keys())
# some more stuff, numeric of different type, this will "mess up" the keys set order
d[0.001] = 0.001
d[3.14] = 'pie'
d[2.71] = 'apple pie'
print d.keys()
print sorted(d.keys())
Perhatikan bahwa kamus diurutkan saat dicetak. Tetapi set kunci pada dasarnya adalah sebuah hashmap!
Untuk Python 2 dan 3:
import six
six.next(six.itervalues(d))
Is there any better way to do this?secara singkat.
first_key, *rest_keys = mydict
Tidak ada perpustakaan eksternal, berfungsi pada Python 2.7 dan 3.x:
>>> list(set({"a":1, "b": 2}.values()))[0]
1
Untuk kunci aribtrary, cukup tinggalkan .values ()
>>> list(set({"a":1, "b": 2}))[0]
'a'
Subclassing dictadalah salah satu metode, meskipun tidak efisien. Di sini jika Anda memberikan bilangan bulat, integer akan kembali d[list(d)[n]], jika tidak, akses kamus seperti yang diharapkan:
class mydict(dict):
def __getitem__(self, value):
if isinstance(value, int):
return self.get(list(self)[value])
else:
return self.get(value)
d = mydict({'a': 'hello', 'b': 'this', 'c': 'is', 'd': 'a',
'e': 'test', 'f': 'dictionary', 'g': 'testing'})
d[0] # 'hello'
d[1] # 'this'
d['c'] # 'is'