我有两个字符串和一个空格的元素列表。我想计算元素的唯一数量并订购列表。
plist = ('burleson both', 'the largemouth', 'the largemouth', 'a 19inch', 'his first')
所以想获得以下内容:
plist = [('the largemouth',2), ('burleson both', 1), ('a 19inch', 1), ('his first', 1)]
我尝试过以下操作,但它似乎创建了多个冗余列表:
unique_order_list = {}
for item in plist:
unique_order_list[item] = plist.count(item)
d = OrderedDict(sorted(unique_order_list.items(), key=operator.itemgetter(1), reverse=True))
感谢任何帮助。谢谢!
答案 0 :(得分:0)
这似乎是关于你正在寻找的东西:
plist = ['burleson both', 'the largemouth', 'the largemouth', 'a 19inch', 'his first']
result = []
def index_finder(string,List):
answer = 0
for i in List:
if i != string:
answer+=1
else:
return answer
def verifier(target,List):
for i in List:
if i[0] == target:
return True
return False
for each in plist:
if verifier(each,result):
result[index_finder(each,plist)]= (each,result[index_finder(each,plist)][1] +1)
else:
result.append((each,1))
print result
另一方面,元组是不可变的,通常不是计数的最佳工具。
答案 1 :(得分:0)
这应该这样做:
plist = ('burleson both', 'the largemouth', 'the largemouth', 'a 19inch', 'his first')
plist = [(x, plist.count(x)) for x in set(plist)]
plist.sort(key=lambda x: x[1], reverse=True)
因此,我们使用set(plist)
来创建一个集合(这是一个列表,其中plist的每个唯一元素只出现一次。然后我们使用count
函数来计算出现的次数原始plist中的每个唯一元素。之后我们根据第二个元素(使用lambda函数)进行排序.Reverse设置为True,因此具有最多出现次数的元素首先出现。
答案 2 :(得分:0)
试试这个:
import collections
plist = ('burleson both', 'the largemouth', 'the largemouth', 'a 19inch', 'his first')
counts = collections.Counter(plist)
print counts # Counter({'the largemouth': 2, 'a 19inch': 1, 'burleson both': 1, 'his first': 1})