#python-3.x #dictionary #binary
#python-3.x #словарь #двоичный
Вопрос:
Учитывая:
>>> di1={'a':1,'b':2, 'c':3}
Если я сделаю:
>>> dir(di1.items())
['__and__', '__class__', '__contains__', '__delattr__',
'__dir__', '__doc__', '__eq__', '__format__', '__ge__',
'__getattribute__', '__gt__', '__hash__', '__init__',
'__init_subclass__', '__iter__', '__le__', '__len__', '__lt__',
'__ne__', '__new__', '__or__', '__rand__', '__reduce__',
'__reduce_ex__', '__repr__', '__reversed__', '__ror__',
'__rsub__', '__rxor__', '__setattr__', '__sizeof__',
'__str__', '__sub__', '__subclasshook__',
'__xor__', 'isdisjoint']
Там есть несколько интересных методов.
Попробуйте __ror__
:
>>> help(di1.items())
...
| __ror__(self, value, /)
| Return value|self.
...
Где value
является только итерацией в соответствии с ошибками Python.
Давайте попробуем несколько примеров:
>>> di1.items().__ror__([1])
{('c', 3), 1, ('b', 2), ('a', 1)}
>>> di1.items().__ror__([10])
{('c', 3), ('b', 2), 10, ('a', 1)}
>>> di1.items().__ror__([1000])
{1000, ('b', 2), ('c', 3), ('a', 1)}
>>> di1.items().__ror__([10,1000])
{('c', 3), ('a', 1), 1000, 10, ('b', 2)}
Заголовок
Каковы варианты использования двоичного or
представления dict с возможностью взаимодействия? (или другие двоичные методы там, __rxor__
, __rand__
также …)
Ответ №1:
Немного поцарапав, я обнаружил, что то, на что я смотрел, является одним из элементов операций набора представления dict, которые включают операции набора .items()
.
Учитывая:
>>> di1={'a': 1, 'b': 2, 'c': 3}
>>> di2={'a': 1, 'b': 3, 'c': 4, 'd':47, 'e':0}
Примеры:
>>> di1.items() amp; di2.items()
{('a', 1)}
# Only 'a' because with .items both key and value must be the same
# equivalent to:
# set(di1.items()) amp; set(di2.items())
# However: values must be hashable
>>> di1.keys() amp; ['a','d']
{'a'}
# only keys compared to a list
# equivalent to set(di1.keys()) amp; set(['a', 'd'])
# carefule tho:
# (di1.keys() | di2.keys()) amp; set(['a', 'e']) is right
# di1.keys() | di2.keys() amp; set(['a', 'e']) is WRONG
# since amp; is higher precedence than |
>>> di1.keys() amp; 'zycd'
{'c'}
# and string
# equivalent to set(di1.keys()) amp; set('zycd')
>>> di1.keys() | di2.keys()
{'b', 'a', 'd', 'e', 'c'}
# all the keys in both dicts -- since sets are used, not
# necessarily in order
>>> di2.keys() - di1.keys()
{'d', 'e'}
# keys exclusively in di2
Это полезно!