我有一个词典列表,其中词典也包含一个列表。
我想生成各个嵌套列表的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
我的理解是错误的,但我不知道在哪里。我想迭代每个字典,然后遍历每个嵌套列表并将项目更新到集合中,这将删除所有重复项,留给我一组所有独特的爱好。
答案 0 :(得分:1)
我明白了:
unique_hobbies = set()
for d in people:
unique_hobbies.update(d['hobbies'])
print(unique_hobbies)
答案 1 :(得分:1)
您还可以使用集合理解:
>>> 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
是一个列表,只能使用整数或切片对列表进行索引。为了使它工作,你需要迭代你的列表,然后访问每个subdicts的'hobbies'
(就像我在上面的set-comprehension中所做的那样)。