python - 如何在 python 中遍历 map 的元素

标签 python string map iteration

给定一个字符串 s,我想知道字符串中的每个字符出现了多少次。这是代码:

def main() :
  while True :
    try :
      line=raw_input('Enter a string: ')
    except EOFError :
      break;
    mp={};

    for i in range(len(line)) :
      if line[i] in mp :
        mp[line[i]] += 1;
      else :
        mp[line[i]] = 1;

    for i in range(len(line)) :
      print line[i],': ',mp[line[i]];

if __name__ == '__main__' :
  main();

当我运行这段代码并输入 abbba 时,我得到:

a : 2
b : 3
b : 3
b : 3
a : 2

我只想得到:

a : 2
b : 3

我明白为什么会这样,但由于我是 python 的新手,我不知道任何其他方法来迭代 map 的元素。谁能告诉我该怎么做?提前致谢。

最佳答案

您可以尝试使用计数器(Python 2.7 及更高版本;请参阅下面的 pre-2.7 选项):

>>> from collections import Counter
>>> Counter('abbba')
Counter({'b': 3, 'a': 2})

然后您可以像访问字典一样访问元素:

>>> counts = Counter('abbba')
>>> counts['a']
2
>>> counts['b']
3

要迭代,您可以使用@BurhanKhalid 的建议(Counter 的行为类似于字典,您可以在其中迭代键/值对):

>>> for k, v in Counter('abbba').iteritems():
...   print k, v
...
a 2
b 3

如果您使用的是 2.7 之前的 Python 版本,您可以使用 defaultdict 稍微简化您的代码(过程仍然相同 - 唯一的区别是现在您不需要必须先检查 key ——如果找不到匹配的 key ,它将“默认”为 0)。 Counter 内置了其他功能,但如果您只是想要计数(并且不关心 most_common 或能够减去,例如),这应该没问题,可以像对待任何其他字典一样对待:

>>> from collections import defaultdict
>>> counts = defaultdict(int)
>>> for c in 'abbba':
...   counts[c] += 1
...
>>> counts
defaultdict(<type 'int'>, {'a': 2, 'b': 3})

当您在字典(或此处的 Counter/defaultdict)上使用 iteritems() 时,将返回一个键和一个值每次迭代(在这种情况下,键是字母,值是出现的次数)。关于使用字典需要注意的一件事是它们本质上是无序的,因此您在迭代时不一定会得到 'a', 'b', ...。以排序方式遍历字典的一种基本方法是遍历排序的键列表(此处按字母顺序排列,但可以操纵 sorted 来处理各种选项),然后返回该键的字典值(还有其他方法,但希望这会提供一些信息):

>>> mapping = {'some': 2, 'example': 3, 'words': 5}
>>> mapping
{'some': 2, 'example': 3, 'words': 5}
>>> for key in sorted(mapping.keys()):
...   print key, mapping[key]
...
example 3
some 2
words 5

关于python - 如何在 python 中遍历 map 的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13098638/

相关文章:

python - 可以根据 Pandas 中的唯一值绘制列的子集吗?

database - ASP.NET MVC。显示数据库中的 html 字符串

java - Java 标准输出中的克罗地亚语字符

javascript - 如何从字符串中提取特定文本。困难的部分是所需的文本会定期更改

php - 使用 Codeigniter 事件记录进行 "within distance"查询

python - argparse .ArgumentParser 引发 ArgumentError

python - 如何停止作为 Windows 服务运行的 web.py 服务器

python - 在 PyCharm 中保存时自动添加换行符?

android - 如何在android中的图像上的两点之间画线?

javascript - 将标记放在使用 topoJSON 和 d3.js 生成的 map 上