Python字典和枚举用法

Python dict and enumerate usage

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
>>> 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}

如何理解"i代表i,c代表枚举"(s)中的"c:i代表i,c"?有人能给我解释一下吗?


我将把这一行分成几行,这样更容易理解。以下代码与示例中的一行程序执行相同的操作:

1
2
3
4
5
6
7
S ="ababcbacadefegdehijhklij"
lindex = {}

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

print(lindex)

输出将是:

江户十一〔七〕号

(重要的是要注意字典值是随机显示的,因为顺序无关紧要。)

Enumerate所做的是遍历字符串中的每个字母,但同时输出字母和计数。因此,它将从count = 0letter ="a"count = 1letter ="b"等开始。然后将这些值添加到字典lindex中,键为字母,值为计数。

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


底线是,这将创建一个字典,记录字符串中每个字符的最后一次出现。以下是如何…

enumerate

第一个enumerate返回一个iterable,其中元素是索引和值的元组。

例子

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

产量

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

由于S是一个可Iterable字符串,enumerate(S)返回一个对应于…

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

词典理解

其次,这个enumerate对象被字典理解所使用,这是创建字典的一种简明方法。

例子

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

。产量

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

字典理解用于创建一个字典,其中键是字符串S中的字母,项是字符的索引。

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

等效代码

如果没有enumerate和字典的理解,代码就相当于…

1
2
3
4
5
6
S ="ababcbacadefegdehijhklij"

lindex = {}

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