Печать всех уникальных значений в словаре 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