3

我有一个字典列表,其中字典还包含一个列表。

我想生成set各个嵌套列表的值,以便最终得到一组所有独特项目(在本例中为爱好)。

我觉得 aset非常适合这个,因为它会自动删除任何重复项,给我留下一组所有独特的爱好。

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

我的理解是错误的,但我不确定在哪里。我想遍历每个字典,然后遍历每个嵌套列表并将项目更新到集合中,这将删除所有重复项,给我留下一组所有独特的爱好。

4

2 回答 2

1

我得到了它:

unique_hobbies = set()

for d in people:
    unique_hobbies.update(d['hobbies'])

print(unique_hobbies)
于 2017-08-02T00:00:32.530 回答
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它是一个列表,并且只能索引带有整数或切片的列表。要使其工作,您需要遍历您的列表,然后访问'hobbies'每个子目录的 (就像我在上面的集合理解中所做的那样)。

于 2017-08-02T08:56:37.230 回答