d = dict(MyClass()=10.023, MyClass()=1.023, MyClass()=8)
- неправильный синтаксис создания диктанта. Когда я пытаюсь запустить его следующим образом
class A:
pass
d = dict(A() = 10.023, A() = 1.023, A() = 8)
print(d)
Я получаю исключение
d = dict(A() = 10.023, A() = 1.023, A() = 8)
^
SyntaxError: keyword can't be an expression
правильный пример, который пытается сделать что-то подобное, где я делаю список кортежей (classobject, value)
, а затем преобразую его в dict
class A:
pass
d = dict([(A(),10.023), (A(),1.023), (A(),8)])
print(d)
Выход будет
{<__main__.A object at 0x103072ba8>: 10.023, <__main__.A object at 0x103072be0>: 1.023, <__main__.A object at 0x103072c88>: 8}
Также list(d)
дает вам список ключей, как вы уже видели в своем примере, а затем, когда вы делаете d[list(d)[0]]
, вы получаете первый ключ, а затем получаете значение первого ключа.
Для последних двух утверждений они вернут true, если вы будете следовать моему соглашению об именах, также обновленное утверждение в вашем вопросе будет работать и для меня.
class A:
pass
d = dict([(A(),10.023), (A(),1.023), (A(),8)])
#Print list of keys
print(list(d))
#[<__main__.A object at 0x102a72ba8>, <__main__.A object at 0x102a72be0>, <__main__.A object at 0x102a72c88>]
#Value of first key
print(d[list(d)[0]])
#10.023
#Value of second key
print(d[list(d)[1]])
#1.023
#Checks if second key is present in list of keys, which is True
print(list(d)[1] in d )
#True
#Checks if first key is present in list of keys, which is True
print(list(d)[0] in d )
#True
Обновление : Ваш новый обновленный синтаксис также работает для меня, если я использую более простой класс
class A:
pass
d = dict()
d[A()] = 10.023
d[A()] = 1.023
d[A()] = 8
print(d)
#{<__main__.A object at 0x101f72be0>: 10.023, <__main__.A object at 0x101f72c88>: 1.023, <__main__.A object at 0x101f7def0>: 8}
for key in d:
print(d[key])
#10.023
#1.023
#8