Sama dengan (==) operator membandingkan dua kamus dan mengembalikan True jika keduanya kamus sama, False jika tidak Show # Python program to compare two dictionaries # using == operator record1 = {'id': 101, 'name': 'Shivang Yadav', 'Age': 21} record2 = {'id': 101, 'name': 'Shivang Yadav', 'Age': 21} record3 = {'id': 102, 'name': 'Radib Kar', 'Age': 23} if record1 == record2: print("record1 is equal to record2") else: print("record1 is not equal to record2") if record2 == record3: print("record2 is equal to record3") else: print("record2 is not equal to record3") Keluaran record1 is equal to record2 record2 is not equal to record3_ 2) Bandingkan dua kamus menggunakan metode DeepDiff() Metode DeepDiff() berasal dari modul "deepdiff" dan membandingkan perbedaan antara dua kamus (koleksi lain juga), dan mengembalikan nilai yang diubah Saya pikir Anda salah memahami _1. 1 dirancang untuk bekerja untuk objek apa pun, bahkan jika mereka tidak mendukung == operator. Dengan kata lain, NotImplemented menjadi False _Jadi, _3 menjadi Salah sesuai dengan harapan Anda “Atau Tidak Diimplementasikan”PeterL
Mari kita lihat semantik di Python 2
_Apa yang Anda harapkan di sini? Ada beberapa kemungkinan semantik
Saya tidak berpikir tidak satu pun di atas adalah semantik default yang baik Saya pikir dokumentasinya menyesatkan sampai-sampai salah dikt. kesetaraan nilai akhirnya jatuh kembali pada semantik default untuk kesetaraan, yang menguji identitas
Alasan d. nilai(). = d. values() bukan karena objek values selalu membandingkan tidak sama, tetapi karena setiap kali Anda memanggil metode, ia mengembalikan objek baru (berbeda) Mengenai Masalah 12445. objek nilai tampilan dict hilang tp_richcmp dan tp_as_number - Pelacak Python, saya menyangkal bahwa tidak ada semantik yang berarti untuk objek nilai. Mereka jelas merupakan sekumpulan objek acak yang tidak terurut, bukan kumpulan atau urutan, hanya kumpulan. Kita dapat secara bermakna mendefinisikan kesetaraan dengan dua cara
Tes kedua hampir sama murahnya dengan tes identitas pada objek nilai itu sendiri. Dari pada _kami mengembalikan _4 (kecuali bahwa dict yang memiliki objek nilai tidak diekspos ke kode Python, jadi saya kira tes ini hanya dapat ditulis dalam C)Tes pertama lebih mahal. Saya tidak bisa memikirkan bagaimana melakukan tes secara efisien. Jika hashable, kita bisa menggunakan Counter() tetapi tidak selalu hashable PeterL
Dalam kasus penggunaan Anda, "perbandingan langsung dari dicts" atau 6 adalah solusi yang tepatSemantik apa pun dari 7 (identitas dict, urutan, set, dan multiset) tidak akan berfungsi dalam kasus iniPeterL
Pertimbangkan ini
Apakah Anda masih berpikir _8 sebanding?Saya tidak berpikir itu adalah perbandingan yang berguna Ya, saya bisa melihatnya. Saya pikir contoh saya tidak bagus, tetapi saya masih mengerti maksud Anda 5Saya masih khawatir tentang kembalinya 5 sebagai perbandingan. Saya pikir itu menyesatkan, karena menyiratkan melakukan "perbandingan yang masuk akal". Bahwa itu selalu mengembalikan _5 (bahkan jika dibandingkan dengan diri sendiri) bisa membingungkan. (Saya mengerti mengapa itu terjadi, saya hanya mempertimbangkan apakah itu membantu atau membingungkan untuk melakukan itu. ) Saya perhatikan Julian di Edisi 12445 memiliki kebingungan yang sama, jadi saya curiga saya mungkin tidak sendirian. Ada perbedaan antara "tidak sebanding" dan "tidak sama". Tapi sayangnya == pada nilai mengembalikan _ 5 (dalam pikiran saya, menyiratkan tidak sama) padahal artinya sebenarnya adalah "tidak sebanding"Saya perhatikan bahwa dokumen menegaskan hal ini, tetapi itu mungkin bukan tempat pertama yang dilihat seseorang. Dan saya memakai topi pemikiran saya untuk kasus penggunaan yang baik Salah satu opsinya adalah menaikkan _5 mungkin relevan?Atau, melakukan tes yang terdaftar di @rhettinger? Baru saja melihat @rhettinger melakukan jajak pendapat Twitter tentang "apa yang dilakukan ini" - sangat tertarik untuk melihat hasilnya QuercusTimSpen210rhettinger |