Получение элементов из Frozenset/ Альтернативы Frozenset

У меня есть вывод frozenset, который выглядит так:

Данные ниже являются лишь примером. В целом, я хочу, чтобы данные были в этом формате:

Для пар:

Пункт Товар Уверенность

Для троек:

Пункт Товар Пункт Уверенность

парный:

[(frozenset({'GRO73461'}), frozenset({'ELE17451'}), 1.0), (frozenset({'ELE26917'}), frozenset({'GRO99222'}), 1.0), 
 (frozenset({'SNA80192'}), frozenset({'ELE17451'}), 1.0), (frozenset({'DAI22896'}), frozenset({'ELE17451'}), 0.9), 
 (frozenset({'GRO99222'}), frozenset({'ELE17451'}), 0.8125)]

троек:

[(frozenset({'DAI22896'}), frozenset({'GRO73461', 'ELE17451'}), 0.8), (frozenset({'GRO73461'}), 
  frozenset({'ELE17451', 'DAI22896'}), 0.8), (frozenset({'ELE17451'}), frozenset({'GRO73461', 'DAI22896'}), 0.3076923076923077)]

Мне было просто интересно, можно ли было получить элемент так, чтобы вывод был в следующем формате:

OUTPUT A
FRO11987 FRO12685 0.4325
FRO11987 ELE11375 0.4225
FRO11987 GRO94758 0.4125
FRO11987 SNA80192 0.4025
FRO11987 FRO18919 0.4015
OUTPUT B
FRO11987 FRO12685 DAI95741 0.4325
FRO11987 ELE11375 GRO73461 0.4225
FRO11987 GRO94758 ELE26917 0.4125
FRO11987 SNA80192 ELE28189 0.4025
FRO11987 FRO18919 GRO68850 0.4015

Если бы не альтернативы использованию Frozenset было бы полезно.

Спасибо за чтение

1 ответ

Решение

Для ваших "двойников" у вас есть наборы с единичными значениями в них. Вы можете получить первое (и единственное) значение несколькими различными способами:

>>> s = frozenset({'GRO73461'})

Распаковка кортежей:

>>> value, = s
>>> value
'GRO73461'

Преобразовать в список, а затем взять первый индекс:

>>> list(s)[0]
'GRO73461'

Создайте итератор, затем возьмите next значение:

>>> next(iter(s))
'GRO73461'

Используйте выражение генератора с next:

>>> next(value for value in s)
'GRO73461'

У вас есть список кортежей, представляющих double:

>>> double = (frozenset({'GRO73461'}), frozenset({'ELE17451'}), 1.0)

Используя первый метод распаковки кортежей, который я показал вам, вы можете распаковать эти значения в одном выражении:

>>> (first,), (second,), third = double
>>> first, second, third
'GRO73461', 'ELE17451', 1.0

Для форматирования двойных значений вы можете использовать строку формата:

>>> double_format = '{} {} {:0.4f}'
>>> double_format.format(first, second, third)
'GRO73461 ELE17451 1.0000'

Итого:

>>> doubles = [
...     (frozenset({'GRO73461'}), frozenset({'ELE17451'}), 1.0), 
...     (frozenset({'ELE26917'}), frozenset({'GRO99222'}), 1.0),
...     (frozenset({'SNA80192'}), frozenset({'ELE17451'}), 1.0), 
...     (frozenset({'DAI22896'}), frozenset({'ELE17451'}), 0.9),
...     (frozenset({'GRO99222'}), frozenset({'ELE17451'}), 0.8125)
... ]
>>> for double in doubles:
...     (first,), (second,), third = double
...     print double_format.format(first, second, third)
GRO73461 ELE17451 1.0000
ELE26917 GRO99222 1.0000
SNA80192 ELE17451 1.0000
DAI22896 ELE17451 0.9000
GRO99222 ELE17451 0.8125
Другие вопросы по тегам