Python - 按条件删除列表中的特定对象

时间:2018-02-14 06:42:23

标签: python

我有一个班级" PushInfo"
并在列表中生成300个PushInfo对象 我想在列表中删除重复的userid和ip

这是我的代码:

from faker import Faker
import random

def RemovePustListDuplicateData(PushList):
    return  list(set([(x.userid, x.ip) for x in PushList]))

def FakeData(number):
  PushList = []
  fake = Faker()
  accountList = [('john','127.0.0.1'),('john','127.0.0.1'),('amy','127.0.0.1'),
                 ('lia','140.112.1.9'),('julia','140.112.1.9'),
                 ('asuka','140.112.1.9'),('roy','140.112.1.9'),('stacie','140.112.1.9'),('ben','123.964.123.41'),
                 ('yich','127.0.0.1'),('beef','127.0.0.1'),('aloha','235.151.123.1'),('yamaha','235.151.123.1')]
  for i in range(0,number):
      user = random.choice(accountList)
      PushList.append(PushInfo(fake.name(),
                                     user[0],
                                     fake.text(max_nb_chars=10),
                                     fake.date(pattern="%Y-%m-%d"),
                                     user[1]
                                     ))

  return PushList


class PushInfo:
    def __init__(self, name, userid, content, time,ip=''):
        self.name = name
        self.userid = userid
        self.content = content
        self.time = time
        self.ip = ip


PushList = FakeData(300)
print("top 10 push in list:")
for push in PushList[:10]:
  print("name:"+push.name+" id:"+push.userid+" content:"+push.content+" time:"+push.time+" ip:"+push.ip)

print("\nremove duplicate userid and ip  data")
print(RemovePustListDuplicateData(PushList))

https://repl.it/@YichLin/Remove-object-in-list/

示例代码是return tuple list

[(userid,ip),(userid,ip)....]

但我想要的结果是

[PushInfo(some data),PushInfo(some data),.....]

如何实现这一结果?

2 个答案:

答案 0 :(得分:3)

试试这个:

parLapplyLB

您需要实施 eq 哈希方法,以检查两个对象是否相同。

答案 1 :(得分:2)

更改RemovePustListDuplicateData(PushList)函数,如下所示: -

def RemovePustListDuplicateData(PushList):
    object_memo = set()
    final_list = []
    for object in PushList:
        if (object.userid, object.ip) in object_memo:
            continue
        else:
            final_list.append(object)
            object_memo.add((object.userid, object.ip))
     return final_list

我希望它有所帮助!