我正在努力解决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是否适用于这个特定的问题。
答案 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