如何打印在列表中只出现一次的元素,而不计算

时间:2013-06-20 16:22:53

标签: python

如果我有一个字典{key:[abccd]}并且我想只打印对应于每个键的唯一值(在这种情况下,(a,b,d)),最有效的方法是什么除了循环每个元素并保持计数?

7 个答案:

答案 0 :(得分:3)

如果元素按您的示例排序;你可以使用itertools.groupby()

from itertools import groupby

print " ".join([k for k, group in groupby(d['key']) if len(list(group)) == 1])
# -> a b d

答案 1 :(得分:2)

一个选项,使用collections.Counter

from collections import Counter
d = {'k': ['a', 'b', 'c', 'c', 'd']}
c = Counter(d['k'])
print [k for k in c if c[k] == 1]
['a', 'b', 'd']

答案 2 :(得分:0)

您可以使用Counter中的collections

>>> d = {'key': ['a', 'b', 'c', 'c', 'd']}
>>> 
>>> from collections import Counter
>>> 
>>> new_dict = Counter(d['key'])
>>> new_dict
Counter({'c': 2, 'a': 1, 'b': 1, 'd': 1})
>>> [elem for elem in new_dict.keys() if new_dict[elem] == 1]
['a', 'b', 'd']

答案 3 :(得分:0)

您可以使用set()查找每个列表中的所有唯一元素。

for key in mydict:
    uniques = set(mydict[key])

答案 4 :(得分:0)

不使用计数器:

unique = []
for i, val in enumerate(d['key']):
    if item not in d['key'][i+1:] and item not in d['key'][:i]:
        unique.append(item)

使用生成器理解:

unique = list((d['key'][i] for i in range(len(d['key'])) if d['key'][i] not in d['key'][i+1:] and d['key'][i] not in d['key'][:i]))

答案 5 :(得分:0)

假设列表已排序:

>>> L = [1, 1, 2, 3, 4, 4, 4, 5]
>>> [e for i, e in enumerate(L) if e == L[i-1] and i < len(L)-1 and not e == L[i+1]]
[1, 4]

答案 6 :(得分:-2)

在Python中,您可以利用一个集合(一个集合不能包含重复元素)来查找每个键中的唯一元素,然后将该集合重新转换为列表

for key in dict:
    print list(set(dict[key]))