【问题标题】:How to find top 3 frequency elements from a list of tuples?如何从元组列表中找到前 3 个频率元素?
【发布时间】:2015-10-30 11:55:21
【问题描述】:
d=[[(u'BAKING', 51)], [(u'ACCESS', 4)],[(u'CUTE', 2)], [(u'RED', 3)],[(u'FINE', 59)], [(u'ACCESS', 49)],[(u'YOU', 97)], [(u'THANK', 41)]]

我有一个包含单词及其对应频率的元组列表。现在如何从这些中找到前 3 个频率词?

t=[]
for items in d:
k=items[0]
print len(k)
for j in k:
    t.append(j)
print t
m=[t[i:i+2] for i  in range(0, len(t), 2)]
print m
j=Counter(m)

这给了我错误,m 是列表,它应该是字典 :( 如何将其转换为字典

【问题讨论】:

  • 我尝试使用 counter() 但没用
  • 另外,如果有像这里这样的重复 [(u'ACCESS', 4)], [(u'ACCESS', 49)] 那么它应该把它的频率加起来 [(u'ACCESS', 53)],我很困惑怎么做!
  • 我们可以看看您涉及counter() 的尝试吗?这将向读者表明您已经尝试过:-)
  • t=[] for items in d: k=items[0] print len(k) for j in k: t.append(j) print t m=[t[i:i+2 ] for i in range(0, len(t), 2)] 打印 m
  • @KanikaSingh:我在下面添加了一个解决方案,该解决方案也考虑了重复项。请让我知道这是否解决了您的问题以及您是否需要进一步解释!

标签: python list python-2.7 tuples


【解决方案1】:

我更喜欢:

sorted(d, key = lambda x: x[0][1], reverse = True)

【讨论】:

  • sorted(d, key=lambda x: x[0][1], reverse=True) 将起作用,因为 d 是对象列表
  • 这也行。但是这样你就不会得到重复项(请参阅问题下方的 cmets)。
【解决方案2】:

您可以使用itemgetteritertools.chain 完成此任务:

from operator import itemgetter
from itertools import chain

sorted(list(chain.from_iterable(d)),  key=itemgetter(1), reverse=True)[0:3]

这会给你:

[(u'YOU', 97), (u'FINE', 59), (u'BAKING', 51)]

一些解释:chain 命令将列表列表展平,以便最终得到一个元组列表(这些可能比元组列表更容易处理)。然后使用itemgetter 根据元组的第二个元素对该列表进行排序,然后选择前三个元素。

编辑:

只需阅读您对多个条目的评论。一种方法如下:

import collections
from operator import itemgetter
from itertools import chain

result_dict = collections.defaultdict(list)
newL = list(chain.from_iterable(d))
for tu in newL:
     result_dict[tu[0]].append(tu[1])

这会给你

defaultdict(<type 'list'>, {u'CUTE': [2], u'BAKING': [51], u'THANK': [41], u'ACCESS': [4, 49], u'YOU': [97], u'FINE': [59], u'RED': [3]})

现在你可以像这样求和得到列表中条目的总和:

res = {k: sum(v) for k,v in result_dict.iteritems()}

以及最好的三个类似的项目:

sorted(res.iteritems(), key=itemgetter(1), reverse=True)[0:3]

在这种情况下是:

[(u'YOU', 97), (u'FINE', 59), (u'ACCESS', 53)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    相关资源
    最近更新 更多