在input_string中标识唯一字母和相应的计数

时间:2018-09-27 18:11:20

标签: python string list dictionary

input_string=mississippi

output_dict={letters=[i,s,p,m],count=[4,4,2,1]}

input_string中删除重复的条目,并对这些重复的值进行计数并以降序显示。 实际的以下代码删除重复项,但如何计算重复值

def mock(input_string):
    a=list(input_string)
    list1=[]
    for i in a:
        if i not in list1:
            list1.append(i)


    print(list1)           


mock("radffffghhh")  

2 个答案:

答案 0 :(得分:2)

d={}
for i in input_string:
    d[i]=d.get(i,0)+1

按相反的值对字典排序

sorted(d.items(), key=lambda kv: kv[1],reverse=True)#[('i', 4), ('s', 4), ('p', 2), ('m', 1)]

使用groupby

from itertools import groupby
{k:len(list(v)) for k,v in groupby(sorted(input_string))}

使用柜台

from collections import Counter
Counter(input_string)

答案 1 :(得分:1)

编辑以在没有计数器的情况下执行此操作:

def char_counter(string):
    count = {}
    for s in string:
        if s in count:
            count[s] += 1
        else:
            count[s] = 1
    return count         


char_counter(input_string)

“密西西比州”的输出:

>>> char_counter(input_string)
{'i': 4, 'm': 1, 'p': 2, 's': 4}

collections有一个名为Counter的软件包。所以拿你的字符串:

from collections import Counter

input_string='mississippi'

Counter(input_string) # call Counter on your input string

#alternative to just call counter on the string:
Counter('mississippi')

两者的输出:

>>> Counter(input_string)
Counter({'i': 4, 'm': 1, 'p': 2, 's': 4})
>>> Counter('mississippi')
Counter({'i': 4, 'm': 1, 'p': 2, 's': 4})