1
Valyrian 2016 年 1 月 8 日
取三个 list 的并集? dict 不是 hashable 的,会很麻烦
|
2
firemiles 2016 年 1 月 8 日
是以 dict 为最小单位交并还是以 dict 中的键值对为最小单位交并
|
3
dawncold 2016 年 1 月 9 日
把 dict 变成 hashable 的,然后转成 set 做交
|
4
langyu 2016 年 1 月 9 日
长度 1000 的话, 咋做都是一样的, 差不了几毫秒
|
5
billgreen1 2016 年 1 月 9 日
dict.items() 返回的是一个元组,对这个元组排序。 也就是 dict ---> 有序的元组。
这样列表中的元素就是有序元组了。可以用 set |
6
HikiJoy 2016 年 1 月 9 日
全部转成 JSON
|
7
xjoker 2016 年 1 月 10 日 via iPhone
set 可以么
|
8
Feiox 2016 年 1 月 10 日
把每个 dict 包裹进一个对象,设置一定规则取 __hash__ 然后吧这些对象丢进 set 中去并集,然后在取出。。。。
|
9
shajiquan 2016 年 1 月 10 日
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 年 1 月 10 日
```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 年 1 月 11 日
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 年 1 月 11 日
@lixiaohan 是的。这个需求这样来处理效率也挺低的。我在实际业务中只处理单个 list 中重复 dict ,楼主这个要 3 个 list ,每个 list 长度 1000 左右……
|
13
mikezhang0515 2016 年 1 月 26 日
把子元素想办法弄成可 hash 对象,然后把 list 转换成 tuple ,然后去交集
|