尝试保持字符顺序

时间:2018-10-12 19:37:14

标签: python

目标是计算字符出现的次数,我想按原始字符串的相同顺序打印它

示例:Hello there!

打印出:h 2 e 3 l 2 o 1 t 1

s_list = s.lower().replace(" ","")
#print s_list
char_count = {}
for i in range(0, len(s_list)):
    if s_list[i] not in char_count:
        char_count[s_list[i]] = 1
    else: 
        char_count[s_list[i]] += 1

s = " "

for k in char_count:
    if k in char_count:
        s += k + " " + str(char_count[k])
print s

但是由于某些原因,!出现在第一个字符之后。

4 个答案:

答案 0 :(得分:2)

有两种方法可以对代码进行最少的更改:

  • 使用带有排序dict的Python版本,例如PyPy,CPython 3.6+或任何Python 3.7+(感谢timgeb!)。您必须稍作更改,因为print是Python 3中的一个函数。
  • 使用dict代替使用collections.OrderedDict

    import collections
    s_list = s.lower().replace(" ","")
    #print s_list
    char_count = collections.OrderedDict()
    for i in range(0, len(s_list)):
        ...
    

答案 1 :(得分:0)

您可以通过列表来跟踪输入的字符,该列表保留顺序:

addComment: this.props.addComment

答案 2 :(得分:0)

使用OrderedDict保留字典中的顺序

from collections import OrderedDict
a='Hello there!'

d=OrderedDict()
for i in a.lower():
    if(i not in [' ','!']):
        d[i]=d.get(i,0)+1
for i,c in d.items():
    print(i,c, end=' ')

答案 3 :(得分:0)

您可以通过多种方式来做到这一点。最简单的方法之一是从第二个列表中获得帮助,以使字符保持有序排列。您的代码看起来像这样:

s_list = s.lower().replace(" ","")
order_list = []
#print s_list
char_count = {}
for i in range(0, len(s_list)):
    if s_list[i] not in char_count:
        order_list.append(s_list[i])
        char_count[s_list[i]] = 1
    else: 
        char_count[s_list[i]] += 1

s = " "

for k in order_list:
    s += k + " " + str(char_count[k])
print s