【问题标题】:Flatten a dictionary of objects展平对象字典
【发布时间】:2018-08-02 22:11:38
【问题描述】:

我有一本像这样的字典:

foo = {'a': [{'11': 'coucou'}, {'22': 'test'}], 'b': [{'33': 'plop'}, {'44': 'last'}]}

我想删除第一级来获得这个:

[{'11': 'coucou'}, {'22': 'test'}, {'33': 'plop'}, {'44': 'last'}]

我试过这个没有成功:

bar = {k
       for d in foo.values()
       for k in d}

错误:TypeError: unhashable type: 'dict'

我知道我的第二次迭代失败了,但我现在不知道为什么以及如何修复它。

【问题讨论】:

    标签: arrays python-3.x dictionary


    【解决方案1】:

    请注意,您的示例输出是一个列表,而您的理解是一个集合。试试

    bar = [k
           for d in foo.values()
           for k in d]
    

    获取列表。你也可以这样做

    from itertools import chain
    
    bar = list(chain.from_iterable(foo.values())) 
    

    【讨论】:

    • 当然你是对的,我不习惯理解语法。
    • sum(foo.values(),[])??
    • @Onyambu 我想你会发现它的效率低得惊人。因为alist + anotherlist 必须扫描两个列表,所以我希望是O(n**2)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 2014-01-05
    • 2019-01-11
    • 2021-12-31
    • 2021-06-02
    相关资源
    最近更新 更多