2013-06-20 57 views
15

我在Python中遇到了一個小問題(我的程序現在在3.2.3版本中)。在Python字典中打印所有唯一值

我有一本字典,看起來像這樣(這只是一個例子,從這裏另一個崗位實際採取):

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

我想簡單地打印()唯一值的列表,消除重複。在此列表的末尾,我想打印字典中唯一值的數量:

movies 
sports 
music 
news 

4 

任何幫助表示讚賞。在這裏還有一些其他的帖子,我發現這些帖子有些相關,但我不太瞭解Python以將其應用於這個特定的問題。

+6

您有一個*列表*的字典。 – jfs

回答

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

使用.itervalues() Python的2多一點效率。因爲你有一個列表字典,我們需要首先從這些字典中抽出這些字典的值;我用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 
25

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

解釋嵌套列表理解的要點。 – DuffJ

+0

嵌套列表是瘋狂的,會有**從來沒有**的想到這一點。 – ToothlessRebel

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

print list 
+0

請將您的答案格式化爲代碼。 – tfv

6

可以explot的set的屬性這個目的;每個元素都是唯一的,重複項將被忽略。

uniqueValues = set(myDict.values()) 

通過以這種方式使用set,複製從.values()返回的元素將被丟棄。然後您可以如下打印它們:

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