Python dict和枚举用法

时间:2018-08-11 23:41:46

标签: python

我对使用dict的一段python代码有些困惑:

>>> S = "ababcbacadefegdehijhklij"
>>> lindex = {c: i for i, c in enumerate(S)}
>>> lindex
{'a': 8, 'c': 7, 'b': 5, 'e': 15, 'd': 14, 'g': 13, 'f': 11, 'i': 22, 'h': 19, 'k': 20, 'j': 23, 'l': 21}

如何理解“ {c:i for i,c in enumerate(S)}”?有人可以给我一些解释吗?

2 个答案:

答案 0 :(得分:1)

最下面的一行将创建一个字典,该字典包含字符串中每个字符的最后一次出现。这是...

enumerate

第一个enumerate返回一个可迭代的元素,这些元素是索引和值的元组。

示例

print(*enumerate(['a', 'b', 'c']))

输出

(0, 'a') (1, 'b') (2, 'c')

由于S是一个可迭代的字符串,因此enumerate(S)返回与...对应的迭代器。

(0, 'a') (1, 'b') (2, 'a') (3, 'b') (4, 'c') ...

字典理解

第二,dictionary-comprehension使用了这个enumerate对象,这是创建字典的简洁方法。

示例

d = { x: x + 1 for x in range(3) }

输出

{0: 1, 1: 2, 2: 3}

dictionary-comprehension用于创建字典,其中的键是字符串S中的字母,项目是字符的索引。

由于字典的键只能与一个值相关联,因此仅保留最后一个值,即字符出现的最后一个索引。

等效代码

没有enumerate和字典理解,代码等效于...

S = "ababcbacadefegdehijhklij"

lindex = {}

for i in range(len(lindex)):
    lindex[i] = S[i]

答案 1 :(得分:1)

我将把一行分成几行,以便于理解。以下代码与您的示例中的一个衬纸具有相同的作用:

S = "ababcbacadefegdehijhklij"
lindex = {}

for count, letter in enumerate(S):
    lindex[letter] = count

print(lindex)

输出将是:

{0: 'a', 1: 'b', 2: 'a', 3: 'b', 4: 'c', 5: 'b', 6: 'a', 7: 'c', 8: 'a', 9: 'd', 10: 'e', 11: 'f', 12: 'e', 13: 'g', 14: 'd', 15: 'e', 16: 'h', 17: 'i', 18: 'j', 19: 'h', 20: 'k', 21: 'l', 22: 'i', 23: 'j'}

(由于顺序无关紧要,随机显示重要的词典值)

枚举的作用是遍历字符串中的每个字母,但同时输出字母和计数。因此,它将以count = 0letter = "a"开始,然后是count = 1letter = "b",依此类推。然后将这些值添加到字典lindex中,其中的键是字母,值是计数。

但是,重要的是要注意,字典中只能有一个键,因此,每次出现相同的字母时,都会替换其字典值。