在python 2.4中动态创建字典
我有一个查询,它一个接一个地给出这样的结果:在python 2.4中动态创建字典,python,python-2.4,Python,Python 2.4,我有一个查询,它一个接一个地给出这样的结果: k1=v1 k2=v2 k3=v3 … 保存结果的变量是tmp。我只是想在检索结果后为结果创建一个字典。我试过: result={} result.update(tmp) 我得到 ValueError:字典更新序列元素#0的长度为1;2是 必需的 我试过这个 result.update(tmp.replace("=",":")) 我也犯了同样的错误。 我不想使用子字符串来获取键和值,然后使用d(k1)=v1来构建dict。还有其他好方法吗?我
k1=v1
k2=v2
k3=v3
…
保存结果的变量是tmp。我只是想在检索结果后为结果创建一个字典。我试过:
result={}
result.update(tmp)
我得到
ValueError:字典更新序列元素#0的长度为1;2是
必需的
我试过这个
result.update(tmp.replace("=",":"))
我也犯了同样的错误。
我不想使用子字符串来获取键和值,然后使用d(k1)=v1来构建dict。还有其他好方法吗?我还可以更改查询,让它生成像k1:v1、k2:v2,。。。
如何在python 2.4中为此动态创建字典?
谢谢大家! 您必须将结果字符串拆分为行,并将每行拆分为一对字符串。这为
dict
构造函数提供了有效的输入:
result = dict(line.strip().split("=", 1) for line in tmp.splitlines())
听起来好像您有一个查询字符串。如果是这样,那么您最好的朋友是
urllib.urldecode()
如果您实际上有一系列换行符,那么您将需要做一些更为定制的事情
# splitlines will split based on \r or \n or the combination
pairs = tmp.splitlines()
# initialize a dict
output = {}
for pair in pairs:
# split the k/v into two parts, the 1 means only break off the first =
k,v = pair.split('=',1)
# assign to the output dict. (you may want k.strip and v.strip to clear extra
# unneeded whitespace.
output[k] = v
或者,如果你真的很想做这一切:
dict(map(lambda x: x.strip(),line.strip().split("=", 1)) for line in tmp.splitlines())
如果
tmp
是一个由k1=v1
对组成的字符串,每行一对,则需要将它们解析为对:
result = {}
for result in query:
key, value = result.split('=', 1)
result[key.strip()] = value.strip()
这假定您的查询返回单个的'key1=value1'
字符串,以分成键和值对
只能将
result.update()
与键值对序列或其他字典一起使用。仅仅传递一个字符串是行不通的;Python将字符串视为一个字符串序列,一个字符串不符合键值对的要求。如果查询结果可以作为Python脚本存储到文件results.py
,则另一种解决方案是使用:
什么是
tmp
?它应该是一个字典,或者是一系列的(键、值)
对。您的tmp
输入既不是也不是,因此会抛出错误。顺便问一下,您为什么要使用2.4?这并不影响这里的答案。如果您真的使用python 2.4,为什么要用python-2.7
标记它?tmp是字符串变量,例如tmp='k1=v1'urldecode()
?为什么不提供一个这样做的例子呢?
$ cat results.py
k1="v1"
k2="v2"
$ python
>>> result = {}
>>> execfile("results.py",{},result)
>>> print result
{'k1': 'v1', 'k2': 'v2'}