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重組再轉成集合比較
重組方法
以上假設你要篩選出來的是使用者名稱
試試這樣