了解 python 中的计数器和字典理解

Understanding counter and dictionary comprehensions in python

我试图找到解释但找不到,如果这是一个愚蠢的问题,我深表歉意。

有数据 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" 到底是什么?

非常感谢任何指点。

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'}。依此类推整个列表。

最后,列表推导returns一个d['gender']的列表,也就是字典中的gender元素。

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

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