如何将元组转换为字典?

时间:2011-04-12 09:30:25

标签: python dictionary tuples

我正在使用Python 2.5和Win XP。我有一个元组如下:

>>> a
(None, '{1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12}')
>>> a[1]
'{1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12}'
>>> 

我想将元组[1]转换为字典,因为我想使用键和值。请帮忙提出建议。 TQ

5 个答案:

答案 0 :(得分:5)

>>> import ast
>>> ast.literal_eval(a[1])
{1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12}

答案 1 :(得分:3)

首先在逗号上拆分字符串。 迭代所有部分。 将每个部分拆分为冒号。 将字符串转换为整数。 将第二个整数作为第一个整数的值添加为键。

答案 2 :(得分:1)

如果您信任a[1]的来源,则可以使用eval

dictionary = eval(a[1])

否则,您可以使用json(或Python 2.5中的simplejsonsee here):

import json
dictionay = json.loads(a[1])

注意:这主要取决于你如何获得字符串:如果它来自repr并且无法被黑客攻击,eval可能会很好。 如果它来自json.dumps(会产生不同的字符串),则应使用json.loads

答案 3 :(得分:1)

还有另一种方法,不使用任何导入。

一个简单的列表理解(temp):

>>> a
(None, '{1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12}')
>>> a[1]
'{1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12}'
>>> temp = [[int(c) for c in b.split(":")] for b in a[1].strip('{}').split(",")]
>>> a_dict = dict(temp)
>>> a_dict[1]
2
>>> a_dict[2]
4

答案 4 :(得分:0)

  

dict()构造函数构建   字典直接来自列表   存储为元组的键值对。什么时候   这些对形成一个模式,列表   理解可以紧凑地指定   键值列表。

     
    
      

dict([('sape',4139),('guido',4127),('jack',4098)])           {'sape':4139,'jack':4098,'guido':4127}       dict([(x,x ** 2)for x in(2,4,6)])#使用列表理解           {2:4,4:16,6:36}

    
  

复制&粘贴自:http://docs.python.org/tutorial/datastructures.html