Python 如何将元组转换为字典?
我正在使用Python 2.5和Win XP。我有一个元组,如下所示:Python 如何将元组转换为字典?,python,dictionary,tuples,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}' >>> 我想将元组a[1]转换为字典,因为我想使用键和值。请帮忙建议。tq如果您信任a[1]的来源,您可以使用eval: dictionary = eval(a
>>> 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如果您信任
a[1]
的来源,您可以使用eval
:
dictionary = eval(a[1])
否则,您可以在Python 2.5中使用json
(或simplejson
):
注意:这主要取决于您如何获得字符串:如果它来自repr
,并且不能被黑客攻击,eval
可能是好的。
如果它来自
json.dumps
(这将导致一个不同的字符串),您应该使用json.loads
如果您信任a[1]
的源,您可以使用eval
:
dictionary = eval(a[1])
否则,您可以在Python 2.5中使用json
(或simplejson
):
注意:这主要取决于您如何获得字符串:如果它来自repr
,并且不能被黑客攻击,eval
可能是好的。
如果它来自
json.dumps
(这将导致一个不同的字符串),您应该使用json.loads
首先在逗号上拆分字符串。
迭代所有部分。
在冒号上拆分每个部分。
将字符串转换为整数。
将第二个整数作为值添加到第一个整数作为键。首先在逗号上拆分字符串。 迭代所有部分。 在冒号上拆分每个部分。 将字符串转换为整数。 将第二个整数作为值添加到第一个整数作为键 dict()构造函数生成 直接从词典列表中检索词典 键值对存储为元组。什么时候 这些对形成一个模式、列表 理解可以简洁地说明 键值列表 dict([('sape',4139),('guido',4127),('jack',4098)]) {'sape':4139,'jack':4098,'guido':4127} dict([(x,x**2)表示(2,4,6)])#使用列表理解 {2:4,4:16,6:36} 从以下位置复制和粘贴: dict()构造函数生成 直接从词典列表中检索词典 键值对存储为元组。什么时候 这些对形成一个模式、列表 理解可以简洁地说明 键值列表 dict([('sape',4139),('guido',4127),('jack',4098)]) {'sape':4139,'jack':4098,'guido':4127} dict([(x,x**2)表示(2,4,6)])#使用列表理解 {2:4,4:16,6:36}
从以下位置复制和粘贴:还有另一种方法,不使用任何导入 一个简单的列表理解(temp):
还有另一种方法,不使用任何导入 一个简单的列表理解(temp):
a
是一个元组,a[1]
已经是一个字典了。例如,a[1][4]将为您提供8
。a[1]是字符串,而不是字典。这个元组来自哪里?键和值总是数字吗?a
是元组,a[1]
已经是字典了。例如,a[1][4]将为您提供8
。a[1]是字符串,而不是字典。这个元组来自哪里?键和值是否始终为数字?这可能会起作用,但很危险,除非您完全相信a[1]
的内容始终具有正确的格式,并且从不包含恶意数据eval
在给定正确字符串的情况下几乎可以执行任何操作,因此如果a[1]
有可能被错误或恶意生成,请不要对其使用eval。如果ast.literal\u eval()
,请不要使用eval
ifast.literal\u eval()a[1]
不是JSON格式。我无法导入JSON,因为它显示错误no module JSON。我正在使用Python 2.5。但是我可以使用dictionary=eval(a[1]),而且它可以工作!很好。这可能有效,但很危险,除非您完全相信a[1]
的内容始终具有正确的格式,并且从不包含恶意数据eval
在给定正确字符串的情况下几乎可以执行任何操作,因此如果a[1]
有可能被错误或恶意生成,请不要对其使用eval。如果ast.literal\u eval()
,请不要使用eval
ifast.literal\u eval()a[1]
不是JSON格式。我无法导入JSON,因为它显示错误no module JSON。我正在使用Python 2.5。但是我可以使用dictionary=eval(a[1]),而且它可以工作!很好,您好,>>>>a(无,{1:2,2:4,3:6,4:8,5:10,6:12}')>>>>>键入(a)>>>>a[1]“{1:2,2:4,3:6,4:8,5:10,6:12}>>>>键入(a[1]),很抱歉造成混淆。似乎[1]是字符串类型。如何将str转换为dict?对不起,我忽略了。如果您的字符串元组“语法”与jsonhi中的类似,那么您最好使用Dons json解决方案,>>>>a(无,{1:2,2:4,3:6,4:8,5:10,6:12}')>>>>type(a)>>>a[1]'{1:2,2:4,3:6,4:8,5:10,6:12}>>>type(a[1]),很抱歉给您带来混淆。似乎[1]是字符串类型。如何将str转换为dict?对不起,我忽略了。如果您的字符串元组“语法”与json@maximus:Python2.5中没有ast
模块。把sys.path
@maximus放在某处:Python2.5中没有ast
模块。在sys.path
中的某个地方放置。您还必须在拆分之前删除括号您还必须在拆分之前删除括号您可以使用a[1].strip('{}')
删除括号您可以使用genexpr
和dict
构造函数:dict(map(int,pair.split(“:”)作为[1]中的对。strip('{}')).split(“,”)
与dict([[int(c)表示b中的c.split(“:”)表示a[1]中的b.strip(“{}”).split(“,”)相比,您的表达式有什么优势吗?
?在这种情况下几乎没有区别dict([…])
支持python2.3,创建一个附加列表,并将b
,c
名称泄漏到外部范围<代码>dict(map…
的可读性可能会增加/减少,具体取决于
>>> import ast
>>> ast.literal_eval(a[1])
{1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12}
>>> 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