3

我试图在字典中找到字典的键,并使用集合/列表理解将它们写入集合。

所以它看起来像这样:

dict_o_dicts = {
    1: {'de': 'eins', 'en': 'one' },
    2: {'de': 'zwei', 'en': 'two' },
    3: {'ru': 'три', 'gr': 'τρία' },
    0: {'ru': 'ноль' }}

我可以使用:

result = set()
for x in dict_o_dicts:
    for y in dict_o_dicts[x]:
        result.add(y)

给出所需的输出:

{'de', 'en', 'gr', 'ru'}

但我需要使用集合/列表理解来解决它。我尝试了一切,但我总是卡在某个地方。例如:

result = [set(dict_o_dicts[x].keys()) for x in dict_o_dicts]

它给了我一个集合列表,但我怎么能把它们结合起来呢?我只是不知道如何在一行中解决它。

4

4 回答 4

4

这是一个简短的尝试(这个代码是高尔夫吗?:p)

set().union(*dict_o_dicts.values())

输出:{'de', 'en', 'gr', 'ru'}

于 2022-01-15T16:31:35.697 回答
3

您可以在集合(或其他)理解中使用双(或更多)循环:

>>> { k for sub_dict in dict_o_dicts.values() for k in sub_dict }
{'de', 'gr', 'ru', 'en'}
于 2022-01-15T16:27:28.753 回答
0
result = set()
[[result.add(y) for y in dict_o_dicts[x]] for x in dict_o_dicts]

你可以做这样的事情。

输出:

{'ru', 'gr', 'en', 'de'}
于 2022-01-15T16:28:19.597 回答
0

要使用单级理解来做到这一点,您可以使用集合的 union 方法解包:

set().union(*(v for v in dict_o_dicts.values()))

{'gr', 'ru', 'de', 'en'}

请注意,在这种情况下实际上不需要理解

set().union(*dict_o_dicts.values())

{'gr', 'ru', 'de', 'en'}
于 2022-01-15T18:06:39.053 回答