【问题标题】:Creating an alternating dictionary with a loop in Python在 Python 中使用循环创建交替字典
【发布时间】:2015-07-11 00:47:06
【问题描述】:

我正在尝试创建一个带有循环的字典,具有交替的条目,尽管条目不一定需要交替,只要它们都在字典中,我只需要最简单的解决方案即可将它们全部放入一本字典。我正在努力实现的一个简单示例:

通常,为了创建带有循环的字典,我会这样做:

{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})

您要替换的所有项目必须在一本字典中给出。

提前致谢!

【问题讨论】:

  • 不仅顺序对你不重要,而且根本不重要:字典是任意排序的。
  • 哦,现在我看到您多次拥有密钥8。这对于标准字典是不可能的。
  • 谢谢。那是一个不幸的例子,关键在我的情况下是独一无二的。关键是我不知道如何解决语法以使用循环创建它。等等,让我调整示例,使键是唯一的
  • 谢谢!这解决了问题
  • 顺便说一句,这是一个非常好的问题

标签: python loops dictionary clone theano


【解决方案1】:

您可以使用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

【讨论】:

    【解决方案2】:

    理解很酷,但不是绝对必要的。此外,标准字典不能有重复的键。有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}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-04
      • 2019-03-01
      • 2021-12-03
      • 2023-01-17
      • 2021-02-08
      • 2017-01-03
      • 1970-01-01
      • 2011-07-14
      相关资源
      最近更新 更多