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

2024-04-19 22:55:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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的了解还不足以将它应用到这个特定的问题上。


Tags: 程序列表字典文章musicmovies帖子例子
3条回答

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

uniqueValues = set(myDict.values())

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

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

在这里使用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)

使用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()可以提高效率。因为有一个字典列表,我们需要首先从每个字典中提取值;我使用^{}和一个生成器表达式按顺序列出所有值:

>>> 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

相关问题 更多 >