如何计算python、django列表中元素的重复次数

如何计算python、django列表中元素的重复次数,python,django,list,count,django-taggit,Python,Django,List,Count,Django Taggit,我有一个django应用程序,我正在博客中使用django taggit 现在我有一个元素列表(事实上是对象),我从数据库中的一个视图中获得,如下所示 tags = [<Tag: some>, <Tag: here>, <Tag: tags>, <Tag: some>, <Tag: created>, <Tag: here>, <Tag: tags>] 并尝试以如下格式循环打印上述词典 {% for tag_o

我有一个django应用程序,我正在博客中使用
django taggit

现在我有一个元素列表(事实上是对象),我从数据库中的一个视图中获得,如下所示

tags = [<Tag: some>, <Tag: here>, <Tag: tags>, <Tag: some>, <Tag: created>, <Tag: here>, <Tag: tags>]
并尝试以如下格式循环打印上述词典

{% for tag_obj in tags_with_count %}
       <a href="{% url 'tag_detail' tag_obj %}">{{tag_obj}}</a> <span>count:{{tags_with_count[tag_obj]}}</span>
    {% endfor %}
那么,如何在django模板中按like键和值显示字典呢

完成后,我们可以更改上述模板循环如下

{% for tag_obj, count in tags_with_count.iteritems %}
尝试以下方法:

x = ['raz', 'dwa', 'raz', 'trzy', 'dwa', 'raz', 'trzy', 'cztery']
wynik = {}
for i in x:
    if i in wynik:
         wynik[i] += 1
    else:
         wynik[i] = 1
print wynik

{'cztery': 1, 'dwa': 2, 'raz': 3, 'trzy': 2}
如果您需要:

import operator
wynik_sorted = sorted(wynik.iteritems(), key=operator.itemgetter(1), reverse=True)

print wynik_sorted
[('raz', 3), ('dwa', 2), ('trzy', 2), ('cztery', 1)]

count
set
函数看起来在这里很有用

>>> l = ["i", "i", "am", "am", "am", "test"]
>>> list(set([(a, l.count(a)) for a in l]))
[('test', 1), ('i', 2), ('am', 3)]
l.count()
提供列表中给定项的出现次数
set()
将列表转换为一个集合(不包含重复项的无序集合),然后
list
将该集合转换回正确的类型

由于您处理的是
Tag
对象,因此可能需要使用某种方法来获取它们的字符串表示形式(尽管我在它们的接口上找不到文档)。也许是这样的:

>>> l = [a.text for a in l]
>>> list(set([(a, l.count(a)) for a in l]))
试试Python的:

输出:

[('created', 1), ('some', 2), ('here', 2), ('tags', 2)]

实际上,我希望标签对象也在模板中(因为我在上面的
url模板标签中使用它),所以我没有使用
标签的字符串表示形式
objright-我认为要使用此方法,必须计算字符串的重复次数,而不是标签对象。不过,这样做之后,您就可以用标记对象本身替换元组列表中的元素了。老实说,您不需要所有这些逻辑来显示一些对象计数。见:?
x = ['raz', 'dwa', 'raz', 'trzy', 'dwa', 'raz', 'trzy', 'cztery']
wynik = {}
for i in x:
    if i in wynik:
         wynik[i] += 1
    else:
         wynik[i] = 1
print wynik

{'cztery': 1, 'dwa': 2, 'raz': 3, 'trzy': 2}
import operator
wynik_sorted = sorted(wynik.iteritems(), key=operator.itemgetter(1), reverse=True)

print wynik_sorted
[('raz', 3), ('dwa', 2), ('trzy', 2), ('cztery', 1)]
>>> l = ["i", "i", "am", "am", "am", "test"]
>>> list(set([(a, l.count(a)) for a in l]))
[('test', 1), ('i', 2), ('am', 3)]
>>> l = [a.text for a in l]
>>> list(set([(a, l.count(a)) for a in l]))
from collections import Counter

l =  ['some', 'here', 'tags', 'some', 'created', 'here', 'tags']
print(Counter(l).items())
[('created', 1), ('some', 2), ('here', 2), ('tags', 2)]