python - 计算对象列表中有多少对象与属性值的方面相似

标签 python list

这是我的示例代码:

import random
class Test:
    def __init__(self, pin, name):
        self.Pin = pin
        self.Name = name

objects = []
myPinList = [123, 323, 1234, 123, 12314, 1234, 1231, 5754, 5456, 4245, 6573, 5743, 567, 563]

objects.append(Test(random.choice(myPinList), "Jhon"))
objects.append(Test(random.choice(myPinList), "Nimra"))
objects.append(Test(random.choice(myPinList), "Thomas"))
objects.append(Test(random.choice(myPinList), "Treesa"))
objects.append(Test(random.choice(myPinList), "Newt"))
objects.append(Test(random.choice(myPinList), "Greny"))

现在我想统计具有相同 PIN 属性值的对象总数。

objects_having_same_Pin = ???

我搜索了很多,但没有找到一个 pythonic 的方法来做到这一点。

最佳答案

您可以在此处使用collections.Counter:

cnts = Counter([i.Pin for i in objects])

# Counter({1231: 2, 1234: 1, 5456: 1, 5743: 1, 6573: 1})

然后,如果您想要一个总数,只需将所有大于 1 的值相加即可:

'{} users share a Pin'.format(sum([i for _, i in cnts.items() if i > 1]))

# '2 users share a Pin'

如果您想知道分享了一个 pin,您可以使用 collections.defaultdict:

dct = defaultdict(list)

for obj in objects:
    dct[obj.Pin].append(obj.Name)

# defaultdict(list,
#            {1231: ['Jhon', 'Thomas'],
#             1234: ['Nimra'],
#             5456: ['Treesa'],
#             5743: ['Newt'],
#             6573: ['Greny']})

关于python - 计算对象列表中有多少对象与属性值的方面相似,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50776182/

相关文章:

python - 从 Azure 函数获取托管身份访问 token 时出错

python - 如何让 python3 命令运行 Python 3.6 而不是 3.5?

jQuery 均匀高度 float LI

python - 如何在不使用嵌套 for 循环的情况下迭代两个列表?

python - 在 python 中加密到我的 HTTP 代理的连接

python - 如何使用 django 发送带有动态内容的 html 电子邮件?

python - 为 Django 应用程序实现 Facebook 注销功能

如果第二个列表的一项满足条件并返回新列表,则 Java 8 foreach 添加到新列表

c# - 内存不足异常

swift - 如何使用 iOS 9 将单元格 append 到表格 View ?