如何在python中迭代映射的元素
给定一个字符串如何在python中迭代映射的元素,python,string,map,iteration,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; e
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新手,我不知道其他任何迭代映射元素的方法。谁能告诉我怎么做?提前谢谢 您可以尝试计数器(Python2.7及更高版本;有关2.7之前的选项,请参见下文):
然后,您可以像访问字典一样访问元素:
>>> counts = Counter('abbba')
>>> counts['a']
2
>>> counts['b']
3
>>> from collections import defaultdict
>>> counts = defaultdict(int)
>>> for c in 'abbba':
... counts[c] += 1
...
>>> counts
defaultdict(<type 'int'>, {'a': 2, 'b': 3})
要进行迭代,您可以使用@BurhanKhalid的建议(计数器的行为就像一个字典,您可以在其中迭代键/值对):
如果您使用的是Python 2.7之前的版本,那么可以使用defaultdict
稍微简化您的代码(过程仍然相同-唯一的区别是现在您不必首先检查密钥-如果找不到匹配的密钥,它将“默认”为0)<代码>计数器内置了其他功能,但如果您只是想要计数(并且不关心最常见的或能够减去
,例如),这应该很好,可以像其他任何字典一样处理:
>>> counts = Counter('abbba')
>>> counts['a']
2
>>> counts['b']
3
>>> from collections import defaultdict
>>> counts = defaultdict(int)
>>> for c in 'abbba':
... counts[c] += 1
...
>>> counts
defaultdict(<type 'int'>, {'a': 2, 'b': 3})
在一个数组上迭代会产生关键点
>>> d = {'foo': 42, 'bar': 'quux'}
>>> for k in d:
... print k, d[k]
...
foo 42
bar quux
您需要查找dict()的帮助。它们都在那里--“对于mp中的k”迭代键,“对于mp.values()中的v”迭代值,“对于mp.items()中的k,v”迭代键和值对
此外,您不需要这些分号。虽然它们在Python中是合法的,但没有人使用它们,几乎没有理由这样做。Python2.5及更高版本
dDIct = collections.defaultdict(int)
[(d[i]+=1) for i in line]
print dDict
回答很好,但是你能告诉我如何迭代计数器的元素吗?对于计数器中的k,v('aaaabbbcccddd')。iteritems():
@RondogiannisAristophanes肯定的事情(Ignacio下面的帖子展示了最直接的方法)@BurhanKhalid's也很可爱:)我仍然有同样的问题。我相信你指的是收藏。defaultdict
:)@RocketDonkey:是的,你是对的,当你使用智能手机时就会发生;-)@RondogiannisAristophanes:Sincecollections.Counter
是一个映射,您可以用同样的方法对其进行迭代。
dDIct = collections.defaultdict(int)
[(d[i]+=1) for i in line]
print dDict