【问题标题】:Counter when 2 values are most frequent当 2 个值出现频率最高时计数
【发布时间】:2020-09-28 06:03:06
【问题描述】:

例如,我得到了一个包含两个值的列表列表,这些值与最常见的值相关。 Lines = 我使用的列表列表:

from collections import Counter
most_freq = Counter(bin for sublist in lines for bin in sublist).most_common(1)[0][0]

遍历列表,它只打印一个结果(我知道这是因为 1).. 我最近在论坛里发现了如下代码:

counts = collections.Counter(lines)
mostCommon = counts.most_common()
print(mostCommon)

但错误是“TypeError: unhashable type: 'list'” 我应该更改什么来打印所有最常用的可用值?

【问题讨论】:

  • 您的列表元素是列表,它们不能用作键以便Counter 生成字典。您可以将您的列表更改为tuples,以便Counter 接受它们作为键。你能发布一个lines 列表的例子吗?
  • [['VPS', 'TR'], ['VPS', 'PR'], ['VPS', 'HD'], ['VPS', 'ARI'], [ 'VPS', 'DBS], ....[ZEB,LOA], [ZEB,MON]] 共 32659
  • 我不喜欢改成元组,我还必须做其他功能,它总共迭代了 7000 多个文件(这就是我选择 Counter func 的原因)。
  • 你想要的输出具体是什么?字符串还是列表?
  • 我需要字符串,保存最频繁的 --> 之后我做了一些更改并再次搜索最频繁的字符串

标签: python list frequency


【解决方案1】:

这将打印子列表中两个最常见的项目的列表:

from collections import Counter
most_common = Counter(item for sublist in lines for item in sublist).most_common(2)
print([item for item, _ in most_common])

在您发表评论后,我认为您正在寻找多模式:

from statistics import multimode
print(multimode(item for sublist in lines for item in sublist))

【讨论】:

  • 谢谢,但我只需要第一个,以防只有一个
  • 谢谢! , 很有用。我找到了另一种循环方式,但这个更好
【解决方案2】:

您可以使用list 中的count() 方法来查找每个子列表的总出现次数,然后使用max 函数查找出现频率最高的一个:

most_common = max(lines, key=lambda e: lines.count(e))

【讨论】:

  • 它没有用,给出了一个列表作为答案,一个错误的
  • @TheUndecided 预期输出的格式是什么?如果不是列表,您会期待什么?
  • 我希望得到最频繁的值。如果我将“ZEB”作为最常见的,我不希望得到“[ZEB,AGH4]”,只是 ZEB。如果我最常得到 ZEB 和 DO2H,我希望两者都得到
  • 在这种情况下,您必须解压缩一个列表中的所有值,然后使用Counter。这会奏效。
  • 我能做到,问题是我必须再次打包它们以进行下一步操作..而且文件很多,有什么“更轻松”的方法吗?
【解决方案3】:

可能添加:

most = Counter(b for sublist in lines for b in sublist).most_common(1)[0][0] # most freq'
all_freq = Counter(g for sublist in lines for g in sublist).most_common() 
# prints all frequencies
how_many_times_most_appears = Counter(b for sublist in lines for b in sublist).most_common(1)[0][1] # The most frequent
for k in all_freq:
    if k[1] == how_many_times_most_appears:
        print(k)
 
 # finding which value is same as the most

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多