42

Python のマイナーな問題に苦しんでいます (私のプログラムは現在バージョン 3.2.3 です)。

私は次のような辞書を持っています (これは単なる例であり、実際には別の投稿から取得したものです):

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

一意の値のリストを単純に print() して、重複を排除したい。このリストの最後に、辞書内の一意の値の数を出力したいと思います。

movies
sports
music
news

4

どんな助けでも大歓迎です。私が見つけたいくつかの他の投稿がここにありますが、Python をこの特定の問題に適用するのに十分なほどよく知りません。

4

4 に答える 4

56

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)
于 2013-06-20T15:48:55.803 に答える
25

setこの目的で のプロパティを利用できます。各要素は一意であり、重複は無視されます。

uniqueValues = set(myDict.values())

このように使用setすることで、から返された重複要素は.values()破棄されます。その後、次のように印刷できます。

for value in uniqueValues:  
    print(value)  
print(len(uniqueValues))
于 2017-02-18T23:33:35.633 に答える
11

次を使用し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
于 2013-06-20T15:48:34.910 に答える