需要有关字符串/数字Python.3x的建议

时间:2014-08-16 18:08:30

标签: python string python-3.x counter

所以我的代码到目前为止,想法是计算每个字符的数量并且它有效,但调整是我需要以某种方式用" stars" (' *&#39)。让我举个例子让它更容易理解。

entert text please.
HEY hei

现在是:

histogram:
e: 2
h: 2
i: 1
y: 1

想:

histogram:
e: **
h: **
i: *
y: *

对于有人想知道,是的,这是学校作业的一部分,我不想使用收藏/计数器

def count_dict(mystring):
    d = {}
    # count occurances of character
    for w in mystring:
        d[w] = mystring.count(w)
    # print the result
    print("histogram:")
    for k in sorted(d):
        (str(d[k])).replace(isdigit(), '*')
        print (k +': ' + str(d[k]))

mystring = input("entert text please.\n").lower().replace(' ', '')

count_dict(mystring)

解决

修改

这个小技巧完成了工作:

m = int(str(d[k]))
        print (k +': ' + m*'*')

3 个答案:

答案 0 :(得分:1)

这里有一个提示:

>>> '*'*2
'**'

>>>> '*'*3
'***'

答案 1 :(得分:0)

您可以制作字母计数字典

s = 'Hello world this is my sentence'
unique_letters = filter(lambda i : i.isalpha(), set(s.lower()))

这是unique_letters的集合

['c', 'e', 'd', 'i', 'h', 'm', 'l', 'o', 'n', 's', 'r', 't', 'w', 'y']

我们可以利用*操作来制作星号字符串。这可以在dict comp。

中完成
star_dict = {i : '*' * s.count(i) for i in unique_letters}

star_dict现在

{'c': '*', 'e': '****', 'd': '*', 'i': '**', 'h': '*', 'm': '*', 'l': '***', 'o': '**', 'n': '**', 's': '***', 'r': '*', 't': '**', 'w': '*', 'y': '*'}

打印出来:

for key in star_dict:
    print key, ':', star_dict[key]

c : *
e : ****
d : *
i : **
h : *
m : *
l : ***
o : **
n : **
s : ***
r : *
t : **
w : *
y : *

答案 2 :(得分:0)

您可以使用计数器:

s='HEY hei'

from collections import Counter

hist=Counter(c for c in s.lower() if c.strip())
for l, c in hist.most_common():
    print('{}:{}'.format(l, '*'*c))

打印:

e:**
h:**
i:*
y:*

如果您不能使用Counter,您可以采用'老式方式':

count={}
for e in (c for c in s.lower() if c.strip()):
    count[e]=count.setdefault(e, 0)+1

for k, v in sorted(count.items(), key=lambda t:-t[1]):
    print('{}:{}'.format(k, '*'*v))