Печать всех уникальных значений в словаре 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 достаточно хорошо, чтобы применить его к этой конкретной проблеме.

Ответы

Ответ 1

Используйте 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)

Ответ 2

Вы можете использовать свойства set для этой цели; каждый элемент уникален и дубликаты будут игнорироваться.

uniqueValues = set(myDict.values())

Используя set таким образом, дубликаты, возвращенные из .values() будут отброшены. Затем вы можете распечатать их следующим образом:

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

Ответ 3

Используйте 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

Ответ 4

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