理解python

时间:2018-02-10 09:17:58

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

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

拥有数据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 ['性别']对于n,d”如何在“Counter([d ['性别']为n,d在x)]”中起作用。 在这种情况下,究竟什么是“n”?

非常感谢任何指示。

1 个答案:

答案 0 :(得分: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]