【问题标题】:Convert dict of nested lists to list of tuples将嵌套列表的字典转换为元组列表
【发布时间】:2017-12-27 06:07:40
【问题描述】:

我有 dict 的嵌套 lists:

d = {'a': [[('a1', 1, 1), ('a2', 1, 2)]], 'b': [[('b1', 2, 1), ('b2', 2, 2)]]}
print (d)
{'b': [[('b1', 2, 1), ('b2', 2, 2)]], 'a': [[('a1', 1, 1), ('a2', 1, 2)]]}

我需要创建 listtuples 之类的:

[('b', 'b1', 2, 1), ('b', 'b2', 2, 2), ('a', 'a1', 1, 1), ('a', 'a2', 1, 2)]

我试过了:

a = [[(k, *y) for y in v[0]] for k,v in d.items()]
a = [item for sublist in a for item in sublist]

我认为我的解决方案有点过于复杂。有没有更好、更 Python 的,也许是一条线的解决方案?

【问题讨论】:

    标签: python list dictionary tuples list-comprehension


    【解决方案1】:

    你快到了:

    [(k, *t) for k, v in d.items() for t in v[0]]
    

    v[0] 是必需的,因为您的值只是包含另一个列表的单元素列表。如果您想弄清楚它的作用,可以将上面的内容扩展为以下嵌套的 for 循环:

    for key, value in d.items():   # value is [[(...), (...), ...]]
        for tup in value[0]:  # each (...) from value[0]
            (key, *tup)  # produce a new tuple
    

    演示:

    >>> d = {'a': [[('a1', 1, 1), ('a2', 1, 2)]], 'b': [[('b1', 2, 1), ('b2', 2, 2)]]}
    >>> [(k, *t) for k, v in d.items() for t in v[0]]
    [('a', 'a1', 1, 1), ('a', 'a2', 1, 2), ('b', 'b1', 2, 1), ('b', 'b2', 2, 2)]
    

    【讨论】:

    • @Ev.Kounis: 我发现(k, *t)(k,) + t 更整洁。
    • @MartijnPieters 我使用了不同的配方。你写它的方式是[(k,) + t ..。但我明白了。
    • @MartijnPieters - 这只是 python 3 解决方案吗?谢谢。
    • @jezrael:这使用了 Python 3 的可迭代扩展语法,是的。您可以使用 (k,) + t 而不是 (k, *t) 使其与 Python 2 兼容。
    猜你喜欢
    • 2019-12-28
    • 1970-01-01
    • 2012-09-06
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多