2

如何动态地将元组转换为键值对?

假设我有:

tuple = ('name1','value1','name2','value2','name3','value3')

我想把它放进字典:

dictionary = { name1 : value1, name2 : value2, name3 : value3 )
4

4 回答 4

15

将元组转换为键值对并让dict构造函数构建字典:

it = iter(tuple_)
dictionary = dict(zip(it, it))

惯用语从原本扁平的可迭代对象中zip(it, it)产生成对的项目,提供可以传递给dict构造函数的成对序列。itertools 文档中的 grouper recipe对此进行了概括。

如果输入足够大,请替换zipitertools.izip以避免分配临时列表。与基于映射t[i][i + 1]的表达式不同,以上将适用于任何可迭代对象,而不仅仅是序列。

于 2012-11-22T09:15:15.883 回答
3
dictionary = {tuple[i]: tuple[i + 1] for i in range(0, len(tuple), 2)}

另一种简单的方法:

dictionary = dict(zip(tuple[::2],tuple[1::2]))
于 2012-11-22T10:24:54.807 回答
2

只需做一个简单的循环。

my_dic = {}
tuple = ('name1','value1','name2','value2','name3','value3')
if len(tuple) % 2 == 1:
    my_dic[tuple[-1]] = None
for i in range(0, len(tuple) - 1, 2):
    my_dic[tuple[i]] = tuple[i + 1]
print my_dic
于 2012-11-22T09:16:47.033 回答
2
tuple = ('name1','value1','name2','value2','name3','value3')
d = {}
for i in range(0, len(tuple), 2):
    d[tuple[i]] = tuple[i+1]
print d
于 2012-11-22T09:17:43.810 回答