Saat melintasi grafik dengan Python, a Saya menerima kesalahan ini:
Objek 'dict' tidak memiliki atribut 'has_key'
Ini kode saya:
def find_path(graph, start, end, path=[]):
path = path + [start]
if start == end:
return path
if not graph.has_key(start):
return None
for node in graph[start]:
if node not in path:
newpath = find_path(graph, node, end, path)
if newpath: return newpath
return None
Kode tersebut bertujuan untuk menemukan jalur dari satu node ke node lainnya. Sumber kode: http://cs.mwsu.edu/~terry/courses/4883/lectures/graphs.html
Mengapa saya mendapatkan kesalahan ini dan bagaimana cara memperbaikinya?
python
python-3.x
dictionary
Ashi
sumber
sumber
if not start in graph:
Jawaban:
has_key
telah dihapus dengan Python 3. Dari dokumentasi :Berikut contohnya:
sumber
key not in d.keys()
mungkin jauh lebih lambat juga, karenakey not in d
seharusnya O (1) lookup dan saya percayakeys
menghasilkan daftar, yaitu O (n) lookup (belum lagi mengambil ruang ekstra dalam memori). Saya bisa saja salah tentang hal itu - mungkin masih pencarian dengan hashd.keys()
adalah tampilan yang mengimplementasikan sebagian besar antarmuka yang ditetapkan.in
lebih pendek dan lebih Pythonic, serta konsisten dengan koleksi lain dalam bahasa tersebut.has_key sudah tidak digunakan lagi di Python 3.0 . Atau Anda dapat menggunakan 'dalam'
sumber
Di python3,
has_key(key)
diganti dengan__contains__(key)
Diuji dengan python3.7:
sumber
Saya pikir itu dianggap "lebih pythonic" hanya digunakan
in
saat menentukan apakah kunci sudah ada, seperti disumber
in
kata kunci, niat Anda mungkin tidak cukup jelas apaif start not in graph:
artinya? mungkingraph
adalah daftar dan memeriksa apakah tidak ada string seperti itu dalam daftar? Di sisi lain, jika Anda menggunakan sintaks sepertihas_key
(sekarang usang) atau setidaknyain graph.keys()
lebih jelas bahwagraph
adalahdict
Seluruh kode dalam dokumen tersebut adalah:
Setelah menulisnya, simpan dokumen tersebut dan tekan F 5
Setelah itu, kode yang akan Anda jalankan di shell Python IDLE adalah:
find_path (grafik, 'A', 'D')
Jawaban yang harus Anda terima di IDLE adalah
sumber
Mencoba:
Untuk info lebih lanjut, lihat ProgrammerSought
sumber