4

如果我有一个字典 {key : [abccd]} 并且我只想打印与每个键对应的唯一值(在本例中为 (a,b,d)),那么最有效的方法是什么?循环遍历每个元素并对其进行计数?

4

7 回答 7

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
于 2013-06-20T16:41:33.573 回答
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']
于 2013-06-20T16:32:30.017 回答
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']
于 2013-06-20T16:24:58.263 回答
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]))
于 2013-06-20T16:35:37.493 回答
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]
于 2013-06-20T17:43:50.883 回答
-1

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

for key in mydict:
    uniques = set(mydict[key])
于 2013-06-20T16:26:30.317 回答
-2

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

for key in dict:
    print list(set(dict[key]))
于 2013-06-20T16:25:12.237 回答