如何从中删除重复?

时间:2014-05-05 03:11:23

标签: python

a= {'bana':3, 'hello':2, 'clue':7, 'an':1,'sad':3}
b=list(a.keys())
c=list(a.values())
sorted(c,reverse=True)
x=sorted(c, reverse=True)
print(x)
print(b)
d=[]
for i in x:
   for z in b:
       if a[z] == i:
           l= str(i) +z
           d.append(l)
b=sorted(d, reverse=True)
print(d)

你好,我上面有这个代码。每当我打印出d,我都会得到:

['7clue', '3sad', '3bana', '3sad', '3bana', '2hello', '1an']

无论如何我可以做到这一点

['7clue', '3sad', '3bana', '2hello', '1an']

所以它没有重复2个条目? 感谢

5 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点,但我认为只要订购无关紧要,这将是最有效的方法:

>>> a = ['7clue', '3sad', '3bana', '3sad', '3bana', '2hello', '1an']
>>> list(set(a))
['1an', '2hello', '7clue', '3bana', '3sad']

如果订单确实重要,那么你可以用一个简单的列表comp来做到这一点:

>>> def remove_dups(a):
...     seen = set()
...     seen_add = seen.add
...     return [ x for x in a if x not in seen and not seen_add(x)]
... 
>>> remove_dups(['7clue', '3sad', '3bana', '3sad', '3bana', '2hello', '1an'])
['7clue', '3sad', '3bana', '2hello', '1an']

答案 1 :(得分:0)

可能有一种更好的方法,但我发现使用set()对我所做的大部分工作都很有效。例如,设置(d)。如果您希望类型保留列表,可以使用list(set(d))。

答案 2 :(得分:0)

这是itertools docs

中的unique_everseen食谱
from itertools import ifilterfalse, 
def unique_everseen(iterable, key=None):
    "List unique elements, preserving order. Remember all elements ever seen."
    # unique_everseen('AAAABBBCCDAABBB') --> A B C D
    # unique_everseen('ABBCcAD', str.lower) --> A B C D
    seen = set()
    seen_add = seen.add
    if key is None:
        for element in ifilterfalse(seen.__contains__, iterable):
            seen_add(element)
            yield element
    else:
        for element in iterable:
            k = key(element)
            if k not in seen:
                seen_add(k)
                yield element

L = ['7clue', '3sad', '3bana', '3sad', '3bana', '2hello', '1an']
res = list(unique_everseen(L))

如果订单无关紧要,您当然可以使用

L = list(set(L))

答案 3 :(得分:0)

怎么样:

In [10]: b = [str(v)+k  for k, v in zip(a.keys(), a.values())]

In [11]: b
Out[11]: ['3sad', '1an', '3bana', '2hello', '7clue']

In [12]: sorted(b, key = lambda m: int(m[0:1] ))
Out[12]: ['1an', '2hello', '3sad', '3bana', '7clue']

In [13]: sorted(b, key = lambda m: int(m[0:1] ), reverse=True)
Out[13]: ['7clue', '3sad', '3bana', '2hello', '1an']

答案 4 :(得分:0)

此外,这应该有效:

a= {'bana':3, 'hello':2, 'clue':7, 'an':1,'sad':3}
b=list(a.keys())
x=sorted(list(a.values()), reverse=True)
d=[]
for i in range(len(x)):
    d.append(str(x[i])+b[i])
print(d)