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