Python 从列表和字典生成2元组

Python 从列表和字典生成2元组,python,dictionary,tuples,list-comprehension,Python,Dictionary,Tuples,List Comprehension,我正在寻找一种从列表和字典生成2元组的Pythonic方法 目前我有一份清单和一本字典 生成列表: a_ids = ['A_%' % i for i in range(1,4)] ['A_1', 'A_2', 'A_3'] 词典: a_dict = [{'A': i} for i in range(1,4)] [{'A': 1}, {'A': 2}, {'A': 3}] 我想要的是某种返回的方式: [('A_1', {'A': 1}), ('A_2', {'A': 2}

我正在寻找一种从列表和字典生成2元组的Pythonic方法

目前我有一份清单和一本字典

生成列表:

a_ids = ['A_%' % i for i in range(1,4)]

['A_1', 
 'A_2', 
 'A_3']
词典:

a_dict = [{'A': i} for i in range(1,4)]

[{'A': 1}, 
 {'A': 2}, 
 {'A': 3}]
我想要的是某种返回的方式:

[('A_1', {'A': 1}),
 ('A_2', {'A': 2}),
 ('A_3', {'A': 3})]
我试过:

import itertools
list(itertools.product( (a_ids), (a_dict) ))
很接近,但错了:) 我从概念上理解为什么,但我不确定如何纠正它

[('A_1', {'A': 1}),
 ('A_1', {'A': 2}),
 ('A_1', {'A': 3}),
 ('A_2', {'A': 1}),
 ('A_2', {'A': 2}),
 ('A_2', {'A': 3}),
 ('A_3', {'A': 1}),
 ('A_3', {'A': 2}),
 ('A_3', {'A': 3})]

您想要的是
zip
,而不是
itertools.product

both = zip(a_ids, a_dict)

您想要的是
zip
,而不是
itertools.product

both = zip(a_ids, a_dict)
一行:

twople = [('A_%d' % i, {'A': i}) for i in range(1,4)]
您可以对使用单个
,但在两个位置使用索引值

输出:

[('A_1', {'A': 1}),
 ('A_2', {'A': 2}),
 ('A_3', {'A': 3})]
一行:

twople = [('A_%d' % i, {'A': i}) for i in range(1,4)]
您可以对
使用单个
,但在两个位置使用索引值

输出:

[('A_1', {'A': 1}),
 ('A_2', {'A': 2}),
 ('A_3', {'A': 3})]

这个怎么样:
['A\%d'%i,{'A':i}]表示范围(1,4)内的i

这个怎么样:
['A\%d'%i,{'A':i}]表示范围(1,4)内的i

谢谢@chepner!但是我得到的是一个返回内存地址的函数,所以当我调用'both'时,我得到了Python3中的
zip
,返回一个迭代器;只需将结果包装在一个列表中即可得到实际的元组:
both=list(zip(a_id,a_dict))
。(在Python2中,
zip
返回了一个具体的列表,
itertools.izip
返回了一个迭代器。Python3将迭代器行为作为以前返回列表的几个函数的默认行为。)谢谢@chepner!但是我得到的是一个返回内存地址的函数,所以当我调用'both'时,我得到了Python3中的
zip
,返回一个迭代器;只需将结果包装在一个列表中即可得到实际的元组:
both=list(zip(a_id,a_dict))
。(在Python 2中,
zip
返回了一个具体的列表,
itertools.izip
返回了一个迭代器。Python 3将迭代器行为作为以前返回列表的几个函数的默认行为。)谢谢@Prune,这非常方便,我会使用它,但我现在还需要将它们分开,但知道这一点很方便,再次感谢!谢谢@Prune,这非常方便,我会使用它,但我现在也需要将东西分开,但知道这一点非常方便,再次感谢!一些解释在这里会很有帮助!一些解释在这里会很有帮助!