辞書にもリストが含まれている辞書のリストがあります。リストの辞書から一意の値のセットを取得
それぞれのネストされたリストの値のうち、set
を生成して、すべてのユニークなアイテム(この場合は趣味)のセットになります。
私はset
が自動的にすべての重複を削除するので、これは完璧だと感じ、すべてのユニークな趣味のセットで私を残す。
people = [{'name': 'John', 'age': 47, 'hobbies': ['Python', 'cooking', 'reading']},
{'name': 'Mary', 'age': 16, 'hobbies': ['horses', 'cooking', 'art']},
{'name': 'Bob', 'age': 14, 'hobbies': ['Python', 'piano', 'cooking']},
{'name': 'Sally', 'age': 11, 'hobbies': ['biking', 'cooking']},
{'name': 'Mark', 'age': 54, 'hobbies': ['hiking', 'camping', 'Python', 'chess']},
{'name': 'Alisa', 'age': 52, 'hobbies': ['camping', 'reading']},
{'name': 'Megan', 'age': 21, 'hobbies': ['lizards', 'reading']},
{'name': 'Amanda', 'age': 19, 'hobbies': ['turtles']},
]
unique_hobbies = (item for item in people['hobbies'] for hobby in people['hobbies'].items())
print(unique_hobbies)
これは、エラーが発生します。
TypeError: list indices must be integers or slices, not str
私の理解が間違っているが、私はどこかわかりません。私は各辞書を繰り返し、各入れ子にされたリストを繰り返し、アイテムをセットに更新してすべての重複を削除し、すべてのユニークな趣味のセットを残したいと思います。
これは私の質問にお答えしますが、もしあれば私はフォローアップを持っています。それは動作しますが、PyCharmはあなたの理解が働いてから私が得られない警告を投げています。警告は: 'collections.iterable'が必要ですが、代わりにUnion [str、int、List [str]]があります。 – MarkS
'' hobbies''がすべてList [str] 'であるため、その意味がわかりません。たぶんPyCharmは他の辞書エントリ(名前は 'str'、年代は' int')と混同しているかもしれません。 – MSeifert