我使用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}'
>>>
我想将元组a [1]转换为字典,因为我想使用键和值。请帮助建议。 TQ
我使用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}'
>>>
我想将元组a [1]转换为字典,因为我想使用键和值。请帮助建议。 TQ
>>> import ast
>>> ast.literal_eval(a[1])
{1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12}
如果您信任的a[1]
源,你可以使用eval
:
dictionary = eval(a[1])
否则,你可以(在Python 2.5或simplejson
:see here):使用json
import json
dictionay = json.loads(a[1])
注意:它主要取决于你如何得到字符串:如果它来自repr
并且不能被破解,eval
可能好。 如果它来自json.dumps
(这将导致不同的字符串),则应使用json.loads
。
这可能会起作用,但除非完全相信'a [1]'的内容始终具有正确的格式并且永远不会包含恶意数据,否则它是危险的。鉴于正确的字符串,'eval'可以做任何事情,所以如果任何'a [1]'被严重或恶意生成的机会,请不要对它使用eval。 – 2011-04-12 09:38:24
如果'ast.literal_eval()'[works]不使用'eval'(http://stackoverflow.com/questions/5633095/how-to-convert-tuple-to-dictionary/5633170#5633170)。 'a [1]'不是JSON格式。 – jfs 2011-04-12 09:38:43
你是对的。 a [1]是一个字符串。我刚刚检查过它。 – maximus 2011-04-12 09:38:47
首先在逗号分隔字符串。 迭代所有部分。 拆分冒号的每个部分。 将字符串转换为整数。 将第二个整数作为第一个整数的值添加为键。
您也必须在拆分前删除括号 – Don 2011-04-12 09:49:14
的字典()构造直接从存储为元组的 键 - 值对的列表构建 字典。当 对形成模式时,列表 解析可以紧凑地指定 键值列表。
字典([( 'SAPE',4139),( '圭多',4127),( '千斤顶',4098)]) { 'SAPE':4139, '千斤顶':4098, 'guido':4127} dict([(x,x ** 2)for x in(2,4,6)])#使用列表理解 {2:4,4:16,6:36}
hi, >>> a (None,'{1:2,2:4,3:6,4:8,5:10,6:12} ') >>> type(a)
对不起,我忽略了这一点。然后你最好用Dons json解决方案,假设你的字符串元组的“语法”类似于json – 2011-04-12 09:45:47
还有另一种方法可以做到这一点,而不需要使用任何导入。
简单列表解析(温度):
>>> 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
您可以使用'a [1] .strip('{}')'去除括号 – Don 2011-04-12 10:17:03
正确,更新了代码。 – lecodesportif 2011-04-12 10:19:16
你可以在'[1] .strip('{}')。split(',')中使用'genexpr'和'dict'构造函数:'dict(map(int,pair.split(“:”)) “))' – jfs 2011-04-12 12:04:07
'A'是一个元组,一个'[1]'已经是一个字典。例如,[1] [4]会给你'8'。 – UncleZeiv 2011-04-12 09:33:22
a [1]是一个字符串,而不是字典。 – euphoria83 2011-04-12 09:35:29
这个元组来自哪里?键和值是否始终为数字? – 2011-04-12 09:36:34