打印Python字典中的所有唯一值

时间:2013-06-20 15:47:43

标签: python dictionary

我正在努力解决Python中的一个小问题(我的程序目前在3.2.3版本中)。

我有一个看起来像这样的字典(这只是一个例子,实际上来自这里的另一篇文章):

[{"abc":"movies"}, {"abc": "sports"}, {"abc": "music"}, {"xyz": "music"}, {"pqr":"music"}, {"pqr":"movies"},{"pqr":"sports"}, {"pqr":"news"}, {"pqr":"sports"}]

我想简单地打印()一个唯一值列表,消除重复。在此列表的末尾,我想在字典中打印唯一值的数量:

movies
sports
music
news

4

感谢任何帮助。我发现这里有一些其他帖子有点相关,但我不太清楚Python是否适用于这个特定的问题。

4 个答案:

答案 0 :(得分:34)

此处使用set,因为它们只包含唯一的项目。

>>> lis = [{"abc":"movies"}, {"abc": "sports"}, {"abc": "music"}, {"xyz": "music"}, {"pqr":"music"}, {"pqr":"movies"},{"pqr":"sports"}, {"pqr":"news"}, {"pqr":"sports"}]
>>> s = set( val for dic in lis for val in dic.values())
>>> s 
set(['movies', 'news', 'music', 'sports'])

循环此集以获得预期输出:

for x in s:                                
    print x
print len(s)   #print the length of set after the for-loop
... 
movies
news
music
sports
4

此行s = set( val for dic in lis for val in dic.values())大致相当于:

s = set()
for dic in lis:
   for val in dic.values():
      s.add(val)

答案 1 :(得分:11)

您可以为此目的利用set的属性;每个元素都是唯一的,重复的内容将被忽略。

uniqueValues = set(myDict.values())

以这种方式使用set,将丢弃从.values()返回的重复元素。然后,您可以按如下方式打印它们:

for value in uniqueValues:  
    print(value)  
print(len(uniqueValues))

答案 2 :(得分:9)

使用set()

from itertools import chain

unique_values = set(chain.from_iterable(d.values() for d in dictionaries_list))
for value in unique_values:
    print(value)

print(len(unique_values))

在Python 2上使用.itervalues()可以提高效率。因为您有一个列表字典,我们需要先从每个字典中提取值;我使用itertools.chain.from_iterable()和生成器表达式列出了序列中的所有值:

>>> for value in set(chain.from_iterable(d.values() for d in dictionaries_list)):
...     print(value)
... 
news
sports
movies
music

另一种方法是在生成器表达式中使用嵌套循环:

>>> for value in set(v for d in dictionaries_list for v in d.values()):
...     print(value)
... 
news
sports
movies
music

答案 3 :(得分:3)

dict = {'511':'Vishnu','512':'Vishnu','513':'Ram','514':'Ram','515':'sita'}
list =[] # create empty list
for val in dict.values(): 
  if val in list: 
    continue 
  else:
    list.append(val)

print list