Python 初学者 - 如何拼接具有对象属性频率的对象列表



给定:

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')]

我想计算一下"城市"属性的频率:

期望输出:

[[20, 'LA', 2], [30, 'NY', 1], [30, 'LA', 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]
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]]**

最新更新