84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
小伙看你根骨奇佳,潜力无限,来学PHP伐。
Uin才是唯一标识
Uin
dif_user=set.difference(*[{d['Uin']for d in ls}for ls in [before, now]]) objs=[d for d in before if d['Uin'] in dif_user] print objs
由于两个list各包含了多个dict 假设:
list_before = [dict1{},dict2{}] list_now = [dict3{},dict4{}]
那么存在可能
dict1['UserName'] != dict3['UserName'] && dict1['UserName'] == dict4['UserName']
假设这中情况也认为是包含相同元素的话,那么可以采用:dict{key:set(value)}的结构 利用set()的特点来找出 before有 && now没有 的集合 :
# coding: UTF-8 before=[{u'UserName':u'@b53413e822cf67a219ab7181b074ccf5', u'RemarkPYQuanPin':u'', u'DisplayName': u'', u'KeyWord': u'iss', u'PYInitial': u'', u'Uin': 12266535, u'MemberStatus': 0, u'PYQuanPin': u'', u'RemarkPYInitial': u'', u'NickName': u'\u4e00\u4e8c\u4e09', u'AttrStatus': 2181050407L}, {u'UserName': u'@4babcdd9789c909048a51a069eb37b635f4f79bc5dfc2b5ae6e7325e16848e2b', u'RemarkPYQuanPin': u'', u'DisplayName': u'\u6696\u6696\u7684o', u'KeyWord': u'', u'PYInitial': u'', u'Uin': 1589615073, u'MemberStatus': 0, u'PYQuanPin': u'', u'RemarkPYInitial': u'', u'NickName': u'\u6696\u6696\u7684', u'AttrStatus': 4133}, {u'UserName': u'@1f6ddf50c372ba088a9b8f61670a8cfa5873ede35810a60b4076486eac6c20e2', u'RemarkPYQuanPin': u'', u'DisplayName': u'', u'KeyWord': u'', u'PYInitial': u'', u'Uin': 2720082935L, u'MemberStatus': 0, u'PYQuanPin': u'', u'RemarkPYInitial': u'', u'NickName': u'\u5929\u5929\u60e0\uff5e\u6dd8\u5b9d\u7f51\u5185\u90e8\u6298\u6263', u'AttrStatus': 102469}, {u'UserName': u'@f0142b2f34421927607e46c7c5894fcdb46bdaa173b354ef0d93c7950a3016ac', u'RemarkPYQuanPin': u'', u'DisplayName': u'', u'KeyWord': u'', u'PYInitial': u'', u'Uin': 3048262847L, u'MemberStatus': 0, u'PYQuanPin': u'', u'RemarkPYInitial': u'', u'NickName': u'\u6298\u6263\u53d1\u5e03\u5458Summer', u'AttrStatus': 102469}, {u'UserName': u'@15b51f37927a241f2e0f537c8b446280bdfacd73a8adeacf6db2db096c837a0b', u'RemarkPYQuanPin': u'', u'DisplayName': u'', u'KeyWord': u'', u'PYInitial': u'', u'Uin': 3379331828L, u'MemberStatus': 0, u'PYQuanPin': u'', u'RemarkPYInitial': u'', u'NickName': u'\u7075\u7075\u516b', u'AttrStatus': 4133}] now=[{u'UserName': u'@9233910c70034bc94ccd683157f5760f600f2bd25ac70c4bb66fd501caca8a8e', u'RemarkPYQuanPin': u'', u'DisplayName': u'\u6696\u6696\u7684o', u'KeyWord': u'', u'PYInitial': u'', u'Uin': 1589615073, u'RemarkPYInitial': u'', u'PYQuanPin': u'', u'MemberStatus': 0, u'NickName': u'\u6696\u6696\u7684', u'AttrStatus': 16781349}, {u'UserName': u'@d5131e8ac7df644c522c9293914b70fe5ebee374f0d42c58157b516a567a7dae', u'RemarkPYQuanPin': u'', u'DisplayName': u'', u'KeyWord': u'', u'PYInitial': u'', u'Uin': 2720082935L, u'RemarkPYInitial': u'', u'PYQuanPin': u'', u'MemberStatus': 0, u'NickName': u'\u5929\u5929\u60e0\uff5e\u6dd8\u5b9d\u7f51\u5185\u90e8\u6298\u6263', u'AttrStatus': 2147586117L}, {u'UserName': u'@bd7fc47cfb0c9a3f85505c3794d2945ae46edf28c4e68613993f1aaac480b92a', u'RemarkPYQuanPin': u'', u'DisplayName': u'', u'KeyWord': u'', u'PYInitial': u'', u'Uin': 3048262847L, u'RemarkPYInitial': u'', u'PYQuanPin': u'', u'MemberStatus': 0, u'NickName': u'\u6298\u6263\u53d1\u5e03\u5458Summer', u'AttrStatus': 102469}] re=dict() for d in before: # add values to each set() from dicts in list_before if isinstance(d, dict): for k in d.keys(): if k not in re.keys(): re[k]=set() re[k].add(d[k]) for d in now: # remove values that in list_now's dicts if isinstance(d, dict): for k in d.keys(): if d[k] in re[k]: #print d[k] re[k].remove(d[k]) #if len(re[k])>1: # re[k].remove(d[k]) for item in re.keys(): if re[item]==set([]): # delete keys whose value is set(u'') print item del re[item] print re
你的list中包含的是dict类型,百度的操作是set类型。所以你先要调整格式。
可以通过dict.values()来读取字典中各个key的value,然后再用set的diff操作。
要求每个字典中的各个key的value不会重复,不然set会去重。
eg:
before={'a':1,'b':2} now={'a':1,'b':3} lostlist=list(set(before.values()).difference(set(now.values()))) print lostlist
错误原因就是楼上说的解决方法先把before,now重组再转成集合比较重组方法
reduce(lambada prev,next:prev.append(next['UserName']),before,[]) reduce(lambada prev,next:prev.append(next['UserName']),now,[])
以上假设你要筛选出的是用户名
试试这样
expected = [ l for l in before if l not in now ]
Uin
才是唯一标识由于两个list各包含了多个dict 假设:
那么存在可能
假设这中情况也认为是包含相同元素的话,那么可以采用:
dict{key:set(value)}的结构 利用set()的特点来找出 before有 && now没有 的集合 :
---------------older----------------------
你的list中包含的是dict类型,百度的操作是set类型。所以你先要调整格式。
可以通过dict.values()来读取字典中各个key的value,然后再用set的diff操作。
要求每个字典中的各个key的value不会重复,不然set会去重。
eg:
错误原因就是楼上说的
解决方法
先把before,now重组再转成集合比较
重组方法
以上假设你要筛选出的是用户名
试试这样