【问题标题】:Can't crate a dictionary from two lists using dictionary comprehension with two FORs. Why?无法使用带有两个 FOR 的字典理解从两个列表中创建字典。为什么?
【发布时间】:2021-08-17 07:01:56
【问题描述】:

我知道有很多方法可以从两个列表中创建字典,但我想使用两个 FOR 循环来迭代两个列表。因此,我使用了以下代码。令人惊讶的是,代码不会遍历包含字典键值的第二个列表,而只会将列表的最后一个元素视为值。

key = ['hello', 'mello', 'vello']
value = [1, 2, 3]
dictionary = {k: v for k in key for v in value}
print('dictionary is ', dictionary)

结果是:

dictionary is: {'hello': 3, 'mello': 3, 'vello': 3}

但我希望结果是:

dictionary is: {'hello': 1, 'mello': 2, 'vello': 3}

如果有人能为我澄清这一点,我将不胜感激。

【问题讨论】:

  • “令人惊讶的是,代码不会遍历包含字典键值的第二个列表”当然会。尝试做一个常规的嵌套循环并打印出值。它应该会发光
  • 它确实遍历了第二个列表。覆盖。

标签: python dictionary list-comprehension dictionary-comprehension


【解决方案1】:

我的理解是,每个循环都会以每个数字作为键重新创建完整的字典,导致最终输出仅是最后一个值的输出(最好通过反转键和值语句来显示,返回 {1: 'vello', 2: 'vello', 3: 'vello', 4: 'vello'}

如果另一个是您的预期输出,这应该可以正常工作:

dictionary = dict(zip(key,value))

【讨论】:

    【解决方案2】:

    您可以为此使用zip

    dictionary = dict(zip(keys, values))
    

    【讨论】:

    • 你想要什么?请把你的问题说清楚
    • 我之所以这样问,是因为我在其他地方编写了以下代码,并且它似乎可以正常工作。 flowCost = {a: round(p, 0) for a in list(Graph.edges) for p in normPositiveList(normMean, normSig, len(list(Graph.edges)))} normPositiveList 是一个返回列表的函数。我不明白它背后的逻辑,虽然我知道使用 zip() 可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 2022-08-03
    • 2019-01-16
    相关资源
    最近更新 更多