Я хожу по структуре данных и хотел бы построить отображение битов X-> Y, где X - это поле в структуре данных, в которую я иду, и Y - поле в структуре данных, на которой я строил летать. X - непереключаемый тип.Есть ли эквивалент Python для Java IdentityHashMap?
ответ
тривиальным:
idmap = {}
idmap[id(x)] = y
Используйте id
из x
как ключ словаря
Отлично, спасибо. Сегодня я узнал о функции id! –
Обратите внимание, что для пользовательских классов 'hash (x)' по умолчанию 'id (x)' - здесь вы найдете здесь 'id' в некоторых случаях. – Eric
Цель IdentityHashMap Java - имитировать динамическое поле. Поскольку Python язык уже поддерживает динамические атрибуты напрямую, вам не нужна карта, просто присвоить Y, чтобы приписать Х
x.someSuchRelation = y;
Не все объекты в Python поддерживают динамические атрибуты! – Gabe
Для этого вы можете использовать обычный Python dict
, если вы обмениваете ваши нераскрывающиеся объекты в другом объекте. В частности, что-то вроде этого:
class Wrapper(object):
def __init__(self, o):
self.o = o
def __hash__(self):
return id(self.o)
def __eq__(self, o):
return hash(self) == hash(o)
Тогда просто использовать его как some_dict[Wrapper(unhashable_object)]
.
Это более полезный подход, чем использование id(o)
в качестве ключа, если вам также необходимо иметь доступ к самому объекту впоследствии (как, например, key.o
). Если вы этого не сделаете (и сбор мусора не проблема), просто используйте это.
- 1. C# Эквивалент Java IdentityHashMap
- 2. Есть ли эквивалент Python itertools для Java?
- 3. Есть ли эквивалент Boost :: Python для Java?
- 4. Есть ли эквивалент Java для Python all()?
- 5. Есть ли Java-эквивалент модуля планирования Python?
- 6. Есть ли Java-эквивалент Python defaultdict?
- 7. Есть ли Java-эквивалент отображения языка Python?
- 8. Java HashMap или IdentityHashMap
- 9. Есть ли эквивалент Python для Stream.findAny()?
- 10. Есть ли эквивалент Python для класса AWT Robot от Java?
- 11. Есть ли эквивалент Java для простого разбиения строк на Python?
- 12. Есть ли эквивалент Python Groovy/Grails для Java
- 13. Есть ли эквивалент C++ для python functools.partial
- 14. Есть ли эквивалент Python для HighLine?
- 15. Есть ли эквивалент Python для команды «which»
- 16. Есть ли эквивалент JavaScript для петель Python?
- 17. Есть ли эквивалент python для Laravel 4?
- 18. Есть ли эквивалент пирога для Python?
- 19. Есть ли эквивалент Python для символов Ruby?
- 20. Есть ли эквивалент RedBeanPHP для Python?
- 21. Есть ли эквивалент Python для «изучения» Perl?
- 22. Есть ли эквивалент Python для PHP-FPM?
- 23. Есть ли эквивалент Python для MATLAB?
- 24. Есть ли эквивалент Source Outliner для Java?
- 25. Есть ли эквивалент Java для C# HttpServerUtility.UrlTokenDecode?
- 26. Есть ли Java-эквивалент для PHP get_declared_classes()?
- 27. Есть ли эквивалент java для NSPredicate?
- 28. Есть ли эквивалент C++ для Java BigDecimal?
- 29. Есть ли эквивалент Java для unputc?
- 30. Есть ли эквивалент Java для libevent?
Если X не сотрясается, то разумно предположить, что он может измениться (сделать картографирование немного сложнее). Вы хотите, чтобы этот экземпляр «X» всегда указывал на экземпляр «Y»? Или вы хотите, чтобы любой X этого значения указывал на это «Y». Если это первый, тогда вы можете назначить идентификатор каждому X, а затем идентификатор должен быть сопоставлен с «Y». Если это второй, вы можете временно хранить X в хешируемом контейнере, таком как кортеж, и использовать его в качестве ключа. Я уверен, что есть, вероятно, более быстрые способы сделать это (мои питоны немного ржавые), но он должен работать. – Xonar
@ Xonar: Довольно уверен, что вы не можете хэш кортеж, содержащий не подлежащие стиранию предметы – Eric
Да, правда. (Я действительно говорил, что мой python ржавый :)), но вы можете recursuvely добавить расщепляемые элементы в кортеж. например Поверните (1,2, [2,3]) в (1,2, (2,3)) Спасибо, что указали это. – Xonar