Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python 2.4中动态创建字典_Python_Python 2.4 - Fatal编程技术网

在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'}