【问题标题】:creating dictionary where value is key using comprehension使用理解创建字典,其中值是关键
【发布时间】:2020-11-06 22:34:09
【问题描述】:

我正在尝试使用以下理解方法生成一个字典,其中 value 是一个列表。

>>> x = ['a','b','c']
>>> y = {'a':1,'b':2}
>>> z = {i:[].append(j) for (i,j) in y.items() if i in x and j < 2}

>>> z
{'a': None}

我想得到:

{'a':[1]}

有人可以告诉我该怎么做吗?我想我得到 None 作为价值,因为它充当函数并返回 None。

【问题讨论】:

  • 你很亲密:z = {k: [v] for k, v in y.items() if k in x and v &lt; 2}
  • :) 太棒了。这个社区太棒了!谢谢
  • [].append(j)None 因为它所做的只是将一些东西附加到匿名列表作为副作用,但不返回任何值。 append 不返回新列表(或修改后的列表),它只是修改已经存在的列表。

标签: python dictionary-comprehension


【解决方案1】:

代码

x = ['a','b','c']
y = {'a':1,'b':2}

z = {key: [y[key]] for key in list(y.keys()) if key in x and y[key] < 2}
print(z)

输出:

{'a': [1]}

说明

  1. 我从ylist(y.keys()) 得到每个键
  2. 如果他们的键在x 我继续,否则我跳到下一个键
  3. 如果满足上述条件,我控制y 中的key 值是否小于2
  4. 如果也满足上述条件,我将在 z 中创建一个新项目,其中 key 作为键和一个包含 y 值作为值的列表

您的代码中的错误只是 [].append(j) 返回了 None 所以您只做广告:

z = {i:[j] for (i,j) in y.items() if i in x and j < 2}

另一个奇怪的事情是为j 创建一个列表,这是一个单一的值,但是,因为您在预期的输出中需要它并且您肯定有这样做的理由,所以我保留了您想要的输出,但是一般来说,如果是单个值,最好直接将其存储在字典中,而不是在字典中为其创建嵌套列表

【讨论】:

    猜你喜欢
    • 2013-11-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 2018-11-03
    相关资源
    最近更新 更多