假设:
from collections import Counter
class TEST:
age = 'unknown'
city = 'unknown'
def __init__(self, a, c):
self.age = a
self.city = c
def __repr__(self):
return "(" + str(self.age) + "," + self.city + ")"
L = [TEST(20, 'LA'), TEST(30, 'NY'), TEST(30, 'LA')]
我想计算'City'属性的频率:
期望的输出:
[[20, 'LA', 2], [30, 'NY', 1], [30, 'LA', 2]]
答案 0 :(得分:2)
如果您正在考虑使用Counter
,那么您就走在了正确的轨道上 - 它无法进行您想要的拼接,但它将为您获取频率。由于您希望频率仅基于城市,请告诉Counter
仅关注城市:
freq = Counter(l.city for l in L)
然后freq['LA']
将是与'LA'
相关联的频率。您需要一个元组列表(age, city, frequency)
- L
中的对象将直接为您提供年龄和城市,并且您现在有一个对象可以在您为城市提供时提供频率。这意味着您可以从简单的列表理解中获得所需的结果:
[(l.age, l.city, freq[l.city]) for l in L]
答案 1 :(得分:1)
res=[x.city for x in L]
op=[]
for x in L:
op+=[[x.age,x.city,res.count(x.city)]]
print op
**[[20, 'LA', 2], [30, 'NY', 1], [30, 'LA', 2]]**