将嵌套列表的字典转换为元组列表
Posted
技术标签:
【中文标题】将嵌套列表的字典转换为元组列表【英文标题】:Convert dict of nested lists to list of tuples 【发布时间】:2017-12-27 06:07:40 【问题描述】:我有 dict
的嵌套 list
s:
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)]]
我需要创建 list
的 tuple
s 之类的:
[('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 的,也许是一条线的解决方案?
【问题讨论】:
【参考方案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 兼容。以上是关于将嵌套列表的字典转换为元组列表的主要内容,如果未能解决你的问题,请参考以下文章