【问题标题】:Python: Set list elements as dict valuesPython:将列表元素设置为字典值
【发布时间】:2019-02-25 14:46:42
【问题描述】:

简短的问题和可能的简短回答,但我不明白^^

d = {'a' : 0, 'b' : 0, 'c' : 0, 'd' : 0}
l = [1, 2, 3, 4]

我想将列表值设置为字典,这样

d = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4}

当然

d['a'], d['b'], d['c'], d['d'] = l

会成功,但这不是正确的方法。如果我有 50 个值怎么办……压缩 dl 的循环也可以。

但是有一些像d.values = l 这样的短句,不是吗?

感谢您的帮助! :)

编辑:我使用的是 Python 3.7,所以字典是按插入排序的。

【问题讨论】:

  • 您的语法不正确,d 不是字典而是语法错误,l列表。字典和集合没有顺序,因此您不能只将集合中的值连接到字典中的键。
  • 您需要有一个额外的结构来指示键的预期顺序。或使用 OrderedDict。
  • @meowgoesthedog:是的,我打错了,抱歉。编辑它。在 Python 3.7 中,字典按插入排序。
  • 对于上下文,Perl 允许使用哈希切片进行类似的操作。如果%d = (a=>0, b=>0, c=>0, d=>),则@d{qw/a b c d/} = (1,2,3,4) 会进行所需的成对分配$d{a}=1,等等。

标签: python list dictionary python-3.7


【解决方案1】:

不,没有捷径。您需要将dict.update 与对列表一起使用。

d.update(zip(d, l))

【讨论】:

  • 您的回答很简洁,我没有考虑使用 zip。您也可以从答案中取出第一部分,因为 OP 编辑​​了他的 dict 语法。我也不知道为什么有人对你投了反对票,我投了赞成票
  • @chepner:太好了,这是一个不错的! :)
  • @Jab:他编辑了一个全新的答案。可能这就是为什么会有反对票......这不是我的:)
  • 嗯,我认为反对票最初是有道理的。我错过了你已经提到过使用zip(d,l)。这基本上是相同的答案,但强调使用 zip 作为最简单的可用选项。 (而且我还忘记了 update 将使用对列表,而不是要求您首先创建 dict。)
  • 另外,这就是为什么PEP8 说不使用l 作为变量名,这就是我不匹配的原因。我还以为是1哈哈
【解决方案2】:

在 Python 3.7+ 中,字典按插入项目的顺序排列。因此,以下是正确的。

d = {'a' : 0, 'b' : 0, 'c' : 0, 'd' : 0}
for i, k in enumerate(d.keys(), 1):
    d[k] = i

或者您可以使用以下内容:

d['a'], d['b'], d['c'], d['d'] = range(1,5) #or 1, 2, 3, 4

编辑

使用 dict 理解为您提供一个衬里:

d = {key: val for val, key in enumerate(d.keys(), 1)}

【讨论】:

  • 是的,一个 for 循环就可以了。但我会改用for key, val in zip(d, l)。但是没有循环就没有单行解决方案?
  • 我在答案中添加了一个
  • 这回答了你的问题吗?
  • 只有 Python 3.7 才能保证顺序;在 3.6 中,它是 CPython 的一个实现细节。
  • 好吧,我对问题的理解一定是错误的。是的,您可以按照您所说的那样做我对 zip 所做的事情,或者您也可以使用@chepner 的方法,它们都会做同样的事情。请参阅here 他们都有相同的结果。我以为它只是想让 a-d 等于 1-4
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 2017-04-25
  • 2021-05-22
  • 2012-08-16
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 2016-03-21
相关资源
最近更新 更多