【问题标题】:Understanding counter and dictionary comprehensions in python理解python中的计数器和字典理解
【发布时间】:2018-02-10 09:17:57
【问题描述】:

我试图找到解释但找不到,所以如果这是一个愚蠢的问题,我很抱歉。

有数据 x:

 x = [(1, {'gender': 'male'}),
      (2, {'gender': 'female'}),
      (3, {'gender': 'male'}),
      (4, {'gender': 'female'}),
      (5, {'gender': 'male'})]
      ...

计算每种性别出现次数的一个合理解决方案是:

from collections import Counter
Counter([d['gender'] for n, d in x)])

返回:

Counter({'female':2, 'male':3})

现在我想了解“d['gender'] for n, d”如何在“Counter([d['gender'] for n, d in x)]”中工作。 在这种情况下,“n”到底是什么?

非常感谢您的任何指点。

【问题讨论】:

  • ...如果您有一个基本问题,为什么选择询问 StackOverflow 而不是阅读教程?请研究一下。
  • 更不用说关于 SO 上的列表理解有数十亿(不是那么多,但无论如何)问题。 For example this.
  • 谢谢@user202729 我根本找不到这个字典设置的明确解释,特别是在这种情况下 n 是什么。
  • 简答:n 是一个变量。
  • @liliscent 谢谢,只是一个小提示:不要在没有帮助的情况下浪费大家的时间评论某人不理解某事。

标签: python dictionary list-comprehension counting dictionary-comprehension


【解决方案1】:

x 是一个列表,所以for <whatever> in x 遍历x 并将每个元素分配给<whatever>

x 的元素是元组,因此可以使用元组赋值将元组中的每个项目分配给不同的变量。 for n, d in x 表示n 被分配到元组中的第一项,d 被分配到第二项。

所以第一次迭代就可以了

n, d = (1, {'gender': 'male'})

这将设置n = 1d = {'gender': 'male'}

下一次迭代完成

n, d = (2, {'gender': 'female'})

这将设置n = 2d = {'gender': 'female'}。以此类推整个列表。

最后,列表推导返回一个d['gender'] 列表,它是字典中的gender 元素。

n 没有被使用,它只是用作占位符以便d 可以分配给元组中的第二项。也可以写成:

[el[1]['gender'] for el in x]

【讨论】:

  • 非常感谢巴尔玛!这很有帮助!
猜你喜欢
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 2022-11-22
  • 2020-10-19
  • 2013-08-21
  • 2021-03-12
  • 1970-01-01
相关资源
最近更新 更多