在 Python 中创建带循环的交替字典
Creating an alternating dictionary with a loop in Python
我正在尝试创建一个带有循环的字典,交替条目,虽然条目不一定需要交替,只要它们都在字典中,我只需要最简单的解决方案来获得它们全部在一本字典中。我正在努力实现的一个简单示例:
通常,为了创建带循环的字典,我会这样做:
{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})
您要替换的所有项目都必须在一本字典中给出。
提前致谢!
理解很酷,但不是绝对必要的。此外,标准词典不能有重复的键。有 data structures for that,但您也可以尝试为该键设置 list
个值:
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}
您可以使用 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
init
我正在尝试创建一个带有循环的字典,交替条目,虽然条目不一定需要交替,只要它们都在字典中,我只需要最简单的解决方案来获得它们全部在一本字典中。我正在努力实现的一个简单示例:
通常,为了创建带循环的字典,我会这样做:
{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})
您要替换的所有项目都必须在一本字典中给出。
提前致谢!
理解很酷,但不是绝对必要的。此外,标准词典不能有重复的键。有 data structures for that,但您也可以尝试为该键设置 list
个值:
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}
您可以使用 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
init