Bir anahtarın bir yöntemdeki bir tuple eşleştirilmesi gerekiyor. Anahtar, yöntemin bir argümanıdır. Bunu yapmak için bir sözlük kullanmayı düşünüyordum. Ama sözlükteki anahtarın sabit olması gerekiyor, yöntemin argümanını anahtar olarak kullanmak tamam mı? Değilse, bunu yapmak için hangi veri yapısını kullanmalıyım?Python'da bir eşlemede anahtar olarak argüman nasıl kullanılır?
cevap
Eğer glossary bir sözlüğe tanımına bakarsak:
Sen bir sözlük anahtar için uygun terim hashable demektir şimdi ne hashable (sabit eşdeğer), olmak olduğunu anlayacaktırsözlüğe ilişkilendirilebilir bir dizi, keyfi tuşları değerlere eşlenir. Anahtarlar, __hash __() ve __eq __() yöntemleriyle herhangi bir nesne olabilir. Perl.
:
hashable
Bir nesnesi, ömrü boyunca hiçbir zaman değişmeyen bir karma değere sahipse (karma() yöntemine) sahipse veolabilir, diğer nesnelere göre (eq() yöntemine ihtiyaç duyar). Eşit olan karşılaştırılabilir nesneleri aynı karma değere sahip olmalıdır.
Hashability, bir sözlük anahtarı ve bir set üyesi olarak kullanılabilen bir nesneyi oluşturur, çünkü bu veri yapıları karma değerini dahili olarak kullanır.
Python’un değişmez tüm yerleşik nesneleri, değiştirilebilir olmayan kaplar (listeler veya sözlükler gibi) içermezken yıkanabilir. 'un kullanıcı tanımlı sınıfların örnekleri olduğu nesneler varsayılan olarak yıkanabilir; hepsi eşitsiz (kendileri hariç) karşılaştırır ve bunların karma değeri, id() öğelerinden türetilen 'dir.
Dolayısıyla, örneğin:
>>> d = {}
>>> for k,v in zip(range(5), 'TESTS'): #intergers are hashable
d[k] = v
>>>
>>> d
{0: 'T', 1: 'E', 2: 'S', 3: 'T', 4: 'S'}
>>>
>>> l = [[0], [1], [2], [3], [4]]
>>> for k,v in zip(l, 'TESTS'):
d[k] = v
Traceback (most recent call last):
File "<pyshell#610>", line 2, in <module>
d[k] = v
TypeError: unhashable type: 'list'
Son olarak, test durumu içine koyarak:
>>> def make_dict(k_list, v_list):
d = {}
for k,v in zip(k_list, v_list):
d[k] = v
return d
>>> make_dict(range(5), 'TESTS')
{0: 'T', 1: 'E', 2: 'S', 3: 'T', 4: 'S'}
>>>
>>>
>>> l = [[0], [1], [2], [3], [4]]
>>>
>>> make_dict(l, 'TESTS')
Traceback (most recent call last):
File "<pyshell#607>", line 1, in <module>
make_dict(l, 'TESTS')
File "<pyshell#601>", line 4, in make_dict
d[k] = v
TypeError: unhashable type: 'list'
- 1. LuaJIT ffi'ye bir işaretçi nasıl argüman olarak kullanılır?
- 2. Anahtar nasıl kullanılır?
- 3. Varlıklar eşlemede olduğunda birincil anahtar olmayan değer nasıl edinilir?
- 4. char * bir anahtar olarak std :: map'de nasıl kullanılır
- 5. C/C++ macro argüman olarak genişletiliyor, argüman olarak argüman
- 6. Bir Argüman Olarak DataType Gönderiliyor?
- 7. FactoryGirl'de yabancı anahtar nasıl kullanılır
- 8. subprocess.Popen: Bir listeyi argüman olarak nasıl geçebilir
- 9. Bir karışımda önemli anahtar kelime nasıl kullanılır?
- 10. NSString anahtar olarak nasıl kullanılır Objective-C++ std :: map
- 11. İki yönlü eşlemede sorun nedir?
- 12. Python argparse önceden tanımlanmış bir argüman dizgisi ile nasıl kullanılır?
- 13. Nümerik dizi veya pandalarla pythonda rutini sadeleştirme
- 14. Geçiş değeri, anahtar olarak sözlükte anahtar olarak
- 15. TypeError: histogram() 'yeni' beklenmedik anahtar kelime argüman
- 16. Django'da dinamik yabancı anahtar nasıl kullanılır?
- 17. Şef Bıçağı özel anahtar olmadan nasıl kullanılır?
- 18. Elixir'deki "with" anahtar kelimesi nasıl kullanılır ve ne için kullanılır?
- 19. Python'un iter() bir eşlemede neden iterkeys() yerine iterkeys() döndürür?
- 20. Bir "tür" argüman olarak geçebilir misiniz?
- 21. Burada bash işlevine bir argüman olarak döküman
- 22. Başka bir işleve argüman olarak işlev JQuery
- 23. Tüm bağımsız değişkenler koleksiyon olarak tek bir argüman olarak değil, başka bir işleve nasıl aktarılır?
- 24. java derlenmiş dosyayı bir ant hedefine bir argüman olarak geçirin
- 25. Perl Komutu Eşlemede Boşlukları Kaldırıyor
- 26. XmlAttribute olarak özel bir IXmlSerializable nasıl kullanılır?
- 27. Bir Bitmap Nasıl Bildirim Simgesi Olarak Kullanılır
- 28. Bir maske olarak saydam BitmapData nasıl kullanılır
- 29. Makro tanımı yapmak için bir argüman olarak nasıl iletilebilir?
- 30. Dosya yollarının bir listesini yapmak için Anahtar sözcük nasıl kullanılır
Bir [jenerik memoization fonksiyonunu veya dekoratör] oluşturmak istiyor musunuz (https://wiki.python.org/moin/PythonDecoratorLibrary#Memoize)? –
Kodunuzun bir örneğini yayınlayabilir misiniz? Ve neden bunu argüman olarak kullanmıyorsunuz? .. Bunu denediniz mi ya da herhangi bir sorunla karşılaştınız mı? –
Anahtarın sabit olması gerektiğinden, bir argümanın bir sabit olarak kabul edilip edilemeyeceğinden emin değilim. – CsIsFun