【问题标题】:How to get keys from the inner dictionaries of a nested dictionary using comprehension?如何使用理解从嵌套字典的内部字典中获取键?
【发布时间】:2022-01-15 16:18:38
【问题描述】:

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

所以它看起来像这样:

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]

它给了我一个集合列表,但我怎样才能将它们联合起来呢?就是不知道怎么一口气解决。

【问题讨论】:

  • ChainMapset(ChainMap(*dict_o_dicts.values()))
  • 整个表达式必须是推导式还是唯一要求它必须是单行表达式?
  • 有没有办法只使用标准库?
  • 只需要单行
  • @goinginsane23, collections.ChainMap 是标准库的一部分。

标签: python dictionary set list-comprehension set-comprehension


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    >>> { k for sub_dict in dict_o_dicts.values() for k in sub_dict }
    {'de', 'gr', 'ru', 'en'}
    

    【讨论】:

    • 你可以用 {} 替换 set() 语法,这样你就有一个嵌套的集合理解。目前它使用的是一个 gen 表达式和一个 set() 构造函数,这并不理想。
    【解决方案3】:
    result = set()
    [[result.add(y) for y in dict_o_dicts[x]] for x in dict_o_dicts]
    

    你可以这样做。

    输出:

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

    【讨论】:

      【解决方案4】:

      要使用单层理解,您可以使用集合的联合方法解包:

      set().union(*(v for v in dict_o_dicts.values()))
      
      {'gr', 'ru', 'de', 'en'}
      

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

      set().union(*dict_o_dicts.values())
      
      {'gr', 'ru', 'de', 'en'}
      

      【讨论】:

        猜你喜欢
        • 2021-09-18
        • 1970-01-01
        • 2021-04-28
        • 2019-12-04
        • 2021-07-24
        • 1970-01-01
        • 2021-05-10
        • 2019-09-17
        • 2013-02-19
        相关资源
        最近更新 更多