+ -
当前位置:首页 → 问答吧 → 求教一个python中二维列表按某一数据项去重的问题。

求教一个python中二维列表按某一数据项去重的问题。

时间:2011-08-20

来源:互联网

代码:
Python code

li = [['a', 'b', 'mpilgrim'], ['foo', 'b', 'c'], ['b', 'd', 'd']]
print filter(lambda x, t=[]: (not x[1] in t) and (not t.append(x[1])), li)


得到结果:[['a', 'b', 'mpilgrim'], ['b', 'd', 'd']]
如果我想得要得到的结果不包括:['a', 'b', 'mpilgrim'],也就是说只保留在中间值只出现过一次的列表,我应该用怎样的条件呢?

小弟愚昧,另外求耐烦心好一点的大拿,帮我一下,把(not x[1] in t) and (not t.append(x[1]))这句话翻译成函数。

这里先谢过了。

作者: aiening   发布时间: 2011-08-20

没看明白什么叫“只保留在中间值只出现过一次的列表”。太高估别人的理解力了。

Python code
lambda x, t=[]: (not x[1] in t) and (not t.append(x[1]))

相当于:
Python code
def xx(x, t=[])
    return (not x[1] in t) and (not t.append(x[1]))

作者: iambic   发布时间: 2011-08-20

反转一下序列,这样filter可以沿用原来的函数...

作者: angel_su   发布时间: 2011-08-20

[Quote=引用 1 楼 iambic 的回复:]
没看明白什么叫“只保留在中间值只出现过一次的列表”。太高估别人的理解力了。

也就是说二维序列
Python code

li = [['a', 'b', 'mpilgrim'], ['foo', 'b', 'c'], ['b', 'd', 'd']]



li[0][1]和li[1][1]都是['b'],因此我想排除它,其对比结果我想只得到
Python code

li =[['b','d','d']]


谢谢,我要继续学习表达能力:)

作者: aiening   发布时间: 2011-08-20

引用 2 楼 angel_su 的回复:
反转一下序列,这样filter可以沿用原来的函数...

能说清楚一点吗,什么序列,反转后沿用哪个函数,能达到什么效果呢?谢谢。

作者: aiening   发布时间: 2011-08-20

高级的方法不会用可以用最平法的做法啊。无非是自己记录下出现过几次,然后把出现次数大于1的过滤掉。

Python code
li = [['a', 'b', 'mpilgrim'], ['foo', 'b', 'c'], ['b', 'd', 'd']]

from collections import defaultdict
counter = defaultdict(int)
for _, k, _ in li:
    counter[k] += 1

print filter(lambda x: counter[x[1]] == 1, li)


也可以用collections.Counter

作者: iambic   发布时间: 2011-08-20

最笨的方法实现:

C/C++ code
li = [['a', 'b', 'mpilgrim'], ['foo', 'b', 'c'], ['b', 'd', 'd']]

li_new = []
for i in range(0, len(li)):
    exsit = False
    for j in range(0, len(li)):
        if li[i][1] == li[j][i] and i != j:
            exsit = True
    if not exsit : li_new.append(li[i])



 

作者: Waistcoat23   发布时间: 2011-08-20

not tested:

Python code

li = [['a', 'b', 'mpilgrim'], ['foo', 'b', 'c'], ['b', 'd', 'd']]
print filter(lambda x, t=[]: (not x[1] in t) and (x.count(x[1])==1) and ((not t.append(x[1])), li)

作者: panghuhu250   发布时间: 2011-08-20