Belajar Python dengan Cara yang Sulit - Latihan 39

Pada Latihan 39 dari Learn Python The Hard Way, baris 37 hingga 39 terlihat seperti ini:

print "-"*10
for state, abbrev in states.items():
    print "%s has the city %s" % (state, abbrev)

Saya pikir saya memahami hal ini. Saya pikir Python mengambil KEY:VALUE dari "negara bagian" dan menugaskan KEY ke "negara bagian" dan VALUE ke "singkatan".

Namun, saya menemukan sesuatu yang aneh terjadi ketika saya memasukkan kode berikut:

print "-"*10
for test in states.items():
    print "%s has the city %s" % (test)

Ini menghasilkan output yang sama dengan kode aslinya. Namun, ini hanya berfungsi jika Anda memasukkan %s ke dalam pernyataan print dua kali.

Adakah yang bisa menjelaskan apa yang terjadi dengan "tes"? Apa sebenarnya "tes" itu? Apakah itu Tupel? Tampaknya berisi KEY dan VALUE dari states.items().

Saya telah memeriksa beberapa pertanyaan lain pada Latihan 39 di sini dan saya belum menemukan pertanyaan yang sama.

Kode tercantum di bawah ini (untuk Python 2.7)

# create a mapping of state to abbreviation

states = {
    'Oregan': 'OR',
    'Florida': 'FL',
    'California': 'CA',
    'New York' : 'NY',
    'Michigan' : 'MI'
    }

print "-"*10
for state, abbrev in states.items():
    print "%s has the city %s" % (state, abbrev)

print "-"*10
for test in states.items():
    print "%s has the city %s" % (test)

person alfo35x    schedule 13.03.2016    source sumber
comment
Anda tidak harus menggunakan States.items(), kamus yang dapat diubah secara default adalah kuncinya   -  person sameera sy    schedule 13.03.2016


Jawaban (2)


states adalah kamus, jadi ketika Anda memanggil for test in states.items() ia menugaskan setiap item kamus (a tuple) ke test.

Kemudian Anda hanya mengulangi item dan mencetak kunci dan nilainya seperti yang Anda lakukan dengan for state, abbrev in states.items():

>>> for state in states.items():
    print (state) # print all the tuples


('California', 'CA')
('Oregan', 'OR')
('Florida', 'FL')
('Michigan', 'MI')
('New York', 'NY')

Semua detailnya tersedia online, misalnya di PEP 234 -- Iterators di bawah Iterator Kamus:

  • #P4#
    for k in dict: ... 
    
    #P5#
    for k in dict.keys(): ... 
    
    #P6#
  • #P7#
    for key in dict.iterkeys(): ...
    
    for value in dict.itervalues(): ...
    
    for key, value in dict.iteritems(): ...
    
    #P8#
person Idos    schedule 13.03.2016
comment
Jadi jika saya memahaminya, tes ini setara dengan for k di dict dan ketika Anda mengulanginya dengan pernyataan print, Anda harus memiliki dua instance %s, karena test memiliki kunci dan nilainya? - person alfo35x; 13.03.2016
comment
Ya, pengubah %s adalah string tunggal, jadi Anda diharapkan memiliki 2 string karena Anda mencoba mencetak entri kamus yang memiliki kunci dan nilai :) - person Idos; 13.03.2016
comment
Itu bagus, terima kasih banyak. Saya mencoba tes itu pada awalnya hanya sebagai cara untuk memecahkannya, dan kemudian terkejut ketika hasilnya memberi saya hasil seperti itu. Sangat membantu, terima kasih semuanya! - person alfo35x; 14.03.2016

"Tautan yang hilang" antara cuplikan kode pertama dan kedua ini menjelaskan mengapa keduanya setara:

print "-"*10
for test in states.items():
    state, abbrev = test
    print "%s has the city %s" % (state, abbrev)
person VPfB    schedule 13.03.2016