我在Python 2.7的字典,这些具有以下结构压缩值相应的值。所以,在这种情况下,将创建三个新名单:从字典
[['a', 'd'], ['b', 'e'], ['c', 'f']]
我知道我可以写一个可怕的寻找循环这样做,但我不知道是否有这样做的更pythonic的方法。我需要保持顺序。
我在Python 2.7的字典,这些具有以下结构压缩值相应的值。所以,在这种情况下,将创建三个新名单:从字典
[['a', 'd'], ['b', 'e'], ['c', 'f']]
我知道我可以写一个可怕的寻找循环这样做,但我不知道是否有这样做的更pythonic的方法。我需要保持顺序。
你可以做到以下几点:
zip(*x.values())
说明:
x.values()
回报[['a', 'b', 'c'], ['d', 'e', 'f']]
(顺序可能会改变,所以你可能需要排序x
第一)zip([a, b], [c, d])
回报[[a, c], [b, d]]
x.values()
扩展为参数zip
,请将其加入*
。这没有确定的顺序。它可能产生'[['a','d'],...]或'[['d','a'],...]'。 –
@DanD。如果你想通过按键顺序:'zip(* list(zip(* sorted(x.items())))[1])' –
res = list(zip(x['1'], x['2']))
res = list(map(list, res))
的解释:
zip(x['1'], x['2'])
创建一个zip
对象,你对衔接。
res = list(zip(x['1'], x['2']))
zip
对象现在成为元组列表。
list(map(list, res))
对于res
(每个元组)的每个元素,从元组中的数据结构改变为list
,因为你在你所希望的输出(在res
map
的list
数据类型到所有元素)要求上面。然后,将该对象转换为列表以达到最终的期望结果。
这是行不通的,那些downvoted?它从字面上给出了上面显示的输出OP。 – blacksite
您必须对密钥进行硬编码? –
虽然此代码段可能会解决问题,包括解释[真的有帮助](http://meta.stackexchange.com/q/114762)以提高帖子的质量。请记住,你正在为将来的读者回答这个问题,而不仅仅是现在问的人!请编辑您的答案以添加解释,并指出适用的限制和假设。 – BrokenBinary
这是单线解决问题,但可能比你的循环更糟糕。它遍历已排序的键并生成一个传递给zip的列表,然后映射结果,将元组转换为列表。
>>> x = {'1': ['a', 'b', 'c'], '2': ['d', 'e', 'f']}
>>> map(list, zip(*[x[k] for k in sorted(x)]))
[['a', 'd'], ['b', 'e'], ['c', 'f']]
你有几把钥匙?只有两个(“1”和“2”)? – blacksite