辞書のリストがあり、辞書にもリストが含まれています。
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
私の理解は間違っていますが、どこにあるのかわかりません。各辞書を繰り返し処理してから、ネストされた各リストを繰り返し処理し、アイテムをセットに更新します。これにより、すべての重複が削除され、すべての固有の趣味のセットが残ります。
セット内包表記を使用することもできます。
>>> unique_hobbies = {hobby for persondct in people for hobby in persondct['hobbies']}
>>> unique_hobbies
{'horses', 'lizards', 'cooking', 'art', 'biking', 'camping', 'reading', 'piano', 'hiking', 'turtles', 'Python', 'chess'}
あなたの理解の問題は、あなたがアクセスしたいpeople['hobbies']
がpeople
リストであり、整数またはスライスを持つリストにしかインデックスを付けることができないということです。それを機能させるには、リストを繰り返し処理してから'hobbies'
、各サブディクトにアクセスする必要があります(上記の集合の内包的包絡法の中で行ったように)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加