jez*_*ael 10 python dictionary tuples list-comprehension list
我有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)]]}
Run Code Online (Sandbox Code Playgroud)
我需要创建list的tuple,现实是:
[('b', 'b1', 2, 1), ('b', 'b2', 2, 2), ('a', 'a1', 1, 1), ('a', 'a2', 1, 2)]
Run Code Online (Sandbox Code Playgroud)
我试过了:
a = [[(k, *y) for y in v[0]] for k,v in d.items()]
a = [item for sublist in a for item in sublist]
Run Code Online (Sandbox Code Playgroud)
我认为我的解决方案有点过于复杂.是否有一些更好,更pythonic,也许一线解决方案?
Mar*_*ers 16
你几乎在那里:
[(k, *t) for k, v in d.items() for t in v[0]]
Run Code Online (Sandbox Code Playgroud)
这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
Run Code Online (Sandbox Code Playgroud)
演示:
>>> 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)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
798 次 |
| 最近记录: |