听写理解:复制一个特定的forloop

2024-04-19 16:33:52 发布

您现在位置:Python中文网/ 问答频道 /正文

给定以下代码:

列表列表:

c = [['dog', 'Sg', 'Good'], ['cat', 'Pl', 'Okay'], ['dog', 'Pl', 'Bad'],
     ['dog', 'Sg', 'Good'], ['cat', 'Pl', 'Okay'], ['dog', 'Pl', 'Okay'],
     ['dog', 'Sg', 'Good'], ['cat', 'Sg', 'Good'], ['dog', 'Pl', 'Bad'],
     ['dog', 'Sg', 'Good'],['cat', 'Pl', 'Okay'], ['dog', 'Pl', 'Bad']]

c

创建sets个单词
outer_keys = set()
inner_keys = set()
for x in c:
    outer_keys.add(x[0])
    inner_keys |= set(x[1:])

for loop

创建dict
Lemma = dict()
for i in outer_keys:
    j_d = dict()
    for j in inner_keys:
        j_d[j] = 0
    j_d[i] = 0  # this is the line I can't replicate with a comprehension
    Lemma[i] = j_d

for loop结果:

{'dog': {'Okay': 0, 'Pl': 0, 'Good': 0, 'Bad': 0, 'Sg': 0, 'dog': 0},
 'cat': {'Okay': 0, 'Pl': 0, 'Good': 0, 'Bad': 0, 'Sg': 0, 'cat': 0}}

使用dict comprehension:

  • 这就是我需要帮助的地方。我无法用dict理解来复制for-loop
Lemma = {j: {i: 0 for i in inner_keys} for j in outer_keys}

注:dog应在外dogvalue内,对于cat也是如此

我的dict comprehension结果:

{'dog': {'Okay': 0, 'Pl': 0, 'Good': 0, 'Bad': 0, 'Sg': 0},
 'cat': {'Okay': 0, 'Pl': 0, 'Good': 0, 'Bad': 0, 'Sg': 0}}

问题:

  • 如何用dict comprehension复制for-loop的结果?
    • 顺序不重要。你知道吗

Tags: inloopforkeyssgdictcatpl
2条回答

只要从你的内心世界创建一个新的dict

>>> {j: dict({i: 0 for i in inner_keys}, **{j:0}) for j in outer_keys}
{'dog': {'Bad': 0, 'Good': 0, 'Okay': 0, 'Sg': 0, 'dog': 0, 'Pl': 0}, 'cat': {'Bad': 0, 'Good': 0, 'Okay': 0, 'Sg': 0, 'Pl': 0, 'cat': 0}}

您可以将dict.fromkeysinner_keys | {j}一起使用:

>>> {j: dict.fromkeys(inner_keys | {j}, 0) for j in outer_keys}
{'cat': {'Bad': 0, 'Good': 0, 'Okay': 0, 'Pl': 0, 'Sg': 0, 'cat': 0},
 'dog': {'Bad': 0, 'Good': 0, 'Okay': 0, 'Pl': 0, 'Sg': 0, 'dog': 0}}

相关问题 更多 >