';拉链';Python中的列表字典

';拉链';Python中的列表字典,python,list,dictionary,Python,List,Dictionary,我有一个列表字典,我想把它们合并成一个名为tuples的列表。我想要第一个元组中所有列表的第一个元素,第二个元组中的第二个元素,依此类推 例如: {'key1': [1, 2, 3], 'key2': [4, 5, 6], 'key3': [7, 8, 9]} 我希望结果列表如下所示: [('key1': 1, 'key2': 4, 'key3': 7), ('key1': 2, 'key2': 5, 'key3': 8), ('key1': 3, 'key2': 6, 'key3': 9

我有一个列表字典,我想把它们合并成一个名为tuples的列表。我想要第一个元组中所有列表的第一个元素,第二个元组中的第二个元素,依此类推

例如:

{'key1': [1, 2, 3], 'key2': [4, 5, 6], 'key3': [7, 8, 9]}
我希望结果列表如下所示:

[('key1': 1, 'key2': 4, 'key3': 7), 
('key1': 2, 'key2': 5, 'key3': 8), 
('key1': 3, 'key2': 6, 'key3': 9)]
我想有一种优雅的方式可以做到这一点

编辑:

我比较了@Steve Jessop的双名答案和@Ashwini Chaudhary的字典版本的运行时间,前者稍微快一些:

d = {key: numpy.random.random_integers(0, 10000, 100000) 
        for key in ['key1', 'key2', 'key3']}
平均运行100次:

namedtuple and map: 0.093583753109
namedtuple and zip: 0.119455988407
dictionary and zip: 0.159063346386

先拿钥匙。在这个阶段,你可以对它们进行分类,或者做任何你喜欢的事情。也许您知道按什么顺序使用哪些键,因此不需要检查数据

keys = list(d.keys())
定义命名元组:

Record = collections.namedtuple('Record', keys)
并行迭代所有列表:

[Record(*t) for t in zip(*(d[k] for k in keys))]
或者
list(映射(记录,*(d[k]表示k个键))
如果您喜欢
map

请注意,如果
keys
只是
list(d.keys())
,那么您可以使用
d.values()
来代替
(d[k]代表k个键)
,因为即使字典中键的顺序是任意的,也保证与值的顺序相同。因此,如果您不关心namedtuple中字段的顺序,那么它将简化为:

Record = collections.namedtuple('Record', d.keys())
[Record(*t) for t in zip(*(d.values()))]

或者
list(map(Record,*d.values())
如果您喜欢
map

字典不是排序的数据结构。你试过什么吗?把问题更新得更准确些。还没有真正尝试过任何东西。。。
Record = collections.namedtuple('Record', d.keys())
[Record(*t) for t in zip(*(d.values()))]