2

目前,我有以下方法将字符放在一种可视文本映射中的字典中。不过,我想知道,是否有一种非常简洁的pythonic方式来进行这种双重迭代。有任何想法吗?

lines = ['abc','456','xyz']
chars = {}
for i, row in enumerate(lines):
    for j, c in enumerate(row):
        chars[i,j] = c
4

2 回答 2

4

您可以将其表示为字典理解:

chars = {(i, j): c for i, row in enumerate(lines) for j, c in enumerate(row)}

它基本上是相同的迭代,只是表达方式略有不同。

于 2013-01-26T17:20:10.987 回答
3

使用 dict 理解。阅读嵌套推导的关键: “就像普通循环一样阅读它们,首先描述“大循环”,随后的循环嵌套在其中” 1

In [1]: lines = ['abc','456','xyz']

In [2]: {(i,j): c for i, row in enumerate(lines) for j, c in enumerate(row)}
Out[2]: 
{(0, 0): 'a',
 (0, 1): 'b',
 (0, 2): 'c',
 (1, 0): '4',
 (1, 1): '5',
 (1, 2): '6',
 (2, 0): 'x',
 (2, 1): 'y',
 (2, 2): 'z'}

您可以将理解拆分为多行,以使其更具可读性。如果仔细观察,它实际上与常规循环非常相似,只有最后一行被带到了开头。

除此之外,我建议阅读 Brandon Rhodes 的一篇博文:“我终于理解了嵌套推导”

# Comprehension                       # Regular for loop

{(i,j):c                              # chars = {}
    for i, row in enumerate(lines)    # for i, row in enumerate(lines):
        for j, c in enumerate(row)}   #     for j, c in enumerate(row):
                                      #          chars[i,j] = c
于 2013-01-26T17:38:05.347 回答