Python:词典?

时间:2012-04-23 02:14:23

标签: python

def count_chars(s):
    '''Return a dict that contains each character in str s as a key. The
    value associated with each key is the number of times that character
    occurs in s.'''

    d = {}
    for ch in s:
       if ch in d:
          d[ch] += 1
       else:
          d[ch] = 1
    return d

我没有在代码中获得第3行,“如果ch in d”。如果字符中没有任何条目,为什么字符会出现在字典中呢?

另外,我不知道d [ch] + = 1应该是什么意思,以及为什么会有一个else语句。有人可以帮帮我吗?

4 个答案:

答案 0 :(得分:2)

理解这样的代码的最简单方法是添加print以查看它实际上在做什么。所以,

def count_chars(s):
    '''Return a dict that contains each character in str s as a key. The
    value associated with each key is the number of times that character
    occurs in s.'''

    d = {}
    for ch in s:
       if ch in d:
          print('{} is in d'.format(ch))
          d[ch] += 1
       else:
          print('{} is NOT in d'.format(ch))
          d[ch] = 1
      print('d is now: {}'.format(d))
    return d

count_chars('abcdaaaa')

告诉你:

a is NOT in d
d is now: {'a': 1}
b is NOT in d
d is now: {'a': 1, 'b': 1}
c is NOT in d
d is now: {'a': 1, 'c': 1, 'b': 1}
d is NOT in d
d is now: {'a': 1, 'c': 1, 'b': 1, 'd': 1}
a is in d
d is now: {'a': 2, 'c': 1, 'b': 1, 'd': 1}
a is in d
d is now: {'a': 3, 'c': 1, 'b': 1, 'd': 1}
a is in d
d is now: {'a': 4, 'c': 1, 'b': 1, 'd': 1}
{'a': 4, 'c': 1, 'b': 1, 'd': 1}

答案 1 :(得分:1)

因为每次进行循环时,都要在字典中添加或更新密钥。如果密钥已存在,则表示您正在更新其值。

答案 2 :(得分:1)

与许多其他脚本语言不同,Python不会自动创建元素。 In the docs您将看到方法getdefault()和setdefault(),这对于这样的情况很有用。您也可以按照this thread

中的描述对dict进行子类化

答案 3 :(得分:1)

  

我没有在代码中获得第3行,“如果ch in d”。

这正是它所说的内容:它会检查ch中是否有d

  

如果字符中没有任何条目,为什么字符会出现在字典中呢?

因为它可能最终。代码在for循环中,循环的重点是安排代码运行多次。其中一些运行将内容放入字典中。

  

另外,我不知道d [ch] + = 1应该是什么意思

这意味着语言参考意味着什么。

  

以及为什么会有其他声明。

因为当条件不正确时我们想要做的事情,以及当它出现时要做的事情。