1
Valyrian 2016-01-08 23:29:54 +08:00
取三个 list 的并集? dict 不是 hashable 的,会很麻烦
|
2
firemiles 2016-01-08 23:29:56 +08:00
是以 dict 为最小单位交并还是以 dict 中的键值对为最小单位交并
|
3
dawncold 2016-01-09 00:53:59 +08:00
把 dict 变成 hashable 的,然后转成 set 做交
|
4
langyu 2016-01-09 01:56:46 +08:00
长度 1000 的话, 咋做都是一样的, 差不了几毫秒
|
5
billgreen1 2016-01-09 12:05:08 +08:00
dict.items() 返回的是一个元组,对这个元组排序。 也就是 dict ---> 有序的元组。
这样列表中的元素就是有序元组了。可以用 set |
6
HikiJoy 2016-01-09 13:24:13 +08:00
全部转成 JSON
|
7
xjoker 2016-01-10 11:16:11 +08:00 via iPhone
set 可以么
|
8
Feiox 2016-01-10 12:30:08 +08:00
把每个 dict 包裹进一个对象,设置一定规则取 __hash__ 然后吧这些对象丢进 set 中去并集,然后在取出。。。。
|
9
shajiquan 2016-01-10 16:07:45 +08:00
intersection = lambda a, b, c: \
[ \ dict(t) for t in \ set([ \ tuple(da.items()) for da in a if \ tuple(da.items()) in [tuple(db.items()) for db in b] and \ tuple(da.items()) in [tuple(dc.items()) for dc in c] \ ]) \ ] |
10
shajiquan 2016-01-10 16:08:01 +08:00
```python
intersection = lambda a, b, c: \ [ \ dict(t) for t in \ set([ \ tuple(da.items()) for da in a if \ tuple(da.items()) in [tuple(db.items()) for db in b] and \ tuple(da.items()) in [tuple(dc.items()) for dc in c] \ ]) \ ] ``` |
11
lixiaohan 2016-01-11 10:28:29 +08:00
a = [.....] b = [......] c = [......]
sa = set(tuple(aa.items()) for aa in a) sb = set(tuple(aa.items()) for aa in b) sc = set(tuple(aa.items()) for aa in c) sa&sb&sc 这样就是交集了 是个 set(tuple) 你再转一下 dict 很简单吧 大概就是这样子 代码写的繁琐 但是分步写易懂 |
12
shajiquan 2016-01-11 13:40:44 +08:00
@lixiaohan 是的。这个需求这样来处理效率也挺低的。我在实际业务中只处理单个 list 中重复 dict ,楼主这个要 3 个 list ,每个 list 长度 1000 左右……
|
13
mikezhang0515 2016-01-26 17:31:55 +08:00
把子元素想办法弄成可 hash 对象,然后把 list 转换成 tuple ,然后去交集
|