从 Frozenset/Alternatives 中检索元素到 Frozenset

Posted

技术标签:

【中文标题】从 Frozenset/Alternatives 中检索元素到 Frozenset【英文标题】:Retrieving elements from Frozenset/Alternatives to Frozenset 【发布时间】:2018-01-28 21:16:55 【问题描述】:

我的 freezeset 输出如下所示:

下面的数据只是一个例子。总的来说,我希望数据采用这种格式:

双打:

物品物品置信度

对于三人组:

Item Item 置信度

双打:

[(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

如果没有任何替代使用 freezeset 的方法会有所帮助。

感谢您的阅读

【问题讨论】:

数据中的括号不匹配。你能先修复输入和输出吗? 两个列表中的第一个数值有1.00.8。他们怎么了? print '\n'.join(' '.format(first.pop(), second.pop(), third for first, second, third in as)) 我很抱歉输出不佳,我会修复它们。对于另一个问题,输出只是从更大的数据集中获取时的外观示例。给出的输出只是一个示例,我想将其格式化为上面显示的输出。 我很抱歉,但我并不真正理解该解决方案。也无法让它工作。为什么变量是“as”的一部分? 【参考方案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 = (frozenset('GRO73461'), frozenset('ELE17451'), 1.0)

使用我向您展示的第一个元组解包方法,您可以在一个表达式中解包这些值:

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

要格式化双精度值,您可以使用format string:

>>> 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

【讨论】:

太棒了,谢谢!只是想知道,但这是否是三元组的代码:triple_format = ' :0.4f' 三元组中的三元组:(first,), (second,), (third,), Fourth = Triple print(triple_format.format(first, second, third, Fourth)) 因为我试过了,但由于某种原因它不起作用。 其实没关系,我想通了!我必须 (first,), (second1,second2), third 进行解包,因为第二个元组有两个值!谢谢你的详细解释

以上是关于从 Frozenset/Alternatives 中检索元素到 Frozenset的主要内容,如果未能解决你的问题,请参考以下文章

如何从其他面板从 JTextField 获取输入

从PRISM开始学WPFMVVMViewModel?

在 python 中,为啥从数组读取比从列表读取慢?

从图库中挑选或从相机捕获的高质量图像

从PRISM开始学WPFMVVMCommand?

从PRISM开始学WPFPrism?