用Python循环创建一个交替的字典

3
我将尝试使用循环创建一个字典,其中包含交替的条目,虽然条目不一定需要交替,只要它们都在字典中,我只需要最简单的解决方案将它们全部放入一个字典中。以下是我想要实现的简单示例:
通常,我会使用以下代码来创建一个循环字典:
{i:9 for i in range(3)}
output: {0: 9, 1: 9, 2: 9}

现在我正在尝试以下内容:

{i:9, i+5:8 for i in range(3)}
SyntaxError: invalid syntax

期望的输出是:
{0:9, 5:8, 1:9, 6:8, 2:9, 7:8}

或者,只要所有元素都在字典中(顺序无关紧要),那么这个输出也是可以的:
{0:9, 1:9, 2:9, 5:8, 6:8, 7:8}

背景是我正在使用

theano.clone(cloned_item, replace = {replace1: new_item1, replace2: new_item2})

所有要替换的项都必须在一个字典中给出。

提前感谢!


不仅对你来说顺序无关紧要,而且它根本就不重要:字典是任意排序的。 - TigerhawkT3
2
哦,现在我看到你有多次使用键“8”。这对于标准字典来说是不可能的。 - TigerhawkT3
谢谢。那么不幸的是,这个例子不适用于我的情况,因为在我的情况下关键字是唯一的。问题的关键是我不知道如何使用循环来解决创建它的语法问题。等一下,让我调整一下例子,使关键字是唯一的。 - User01
谢谢!问题已解决。 - User01
顺便说一句,那是一个非常好的问题。 - rassa45
显示剩余3条评论
2个回答

3
您可以使用itertools在一行内完成此操作。
dict(itertools.chain.from_iterable(((i, 9), (i+5, 8)) for i in range(3)))

解释:

内部部分创建了一组元组。

((i, 9), (i+5, 8)) for i in range(3)

在列表形式中,它扩展为:
[((0, 9), (5, 8)), ((1, 9), (6, 8)), ((2, 9), (7, 8))]
chain.from_iterable将其扁平化一级以生成。
[(0, 9), (5, 8), (1, 9), (6, 8), (2, 9), (7, 8)]

当然,这当然适用于以元组序列为参数初始化的dict

2

理解表达式很酷,但并非必须。此外,标准字典不能有重复的键。有数据结构可以实现这一点,但您也可以尝试使用该键的列表

d = {}
d[8] = []
for i in range(3):
    d[i] = 9
    d[8].append(i)

 

>>> d
{8: [0, 1, 2], 0: 9, 2: 9, 1: 9}

针对没有重复键的新示例:

d = {}
for i in range(3):
    d[i] = 9
    d[i+5] = 8

 

>>> d
{0: 9, 1: 9, 2: 9, 5: 8, 6: 8, 7: 8}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接