-1

我有一个查询,它一一给我这样的结果:

k1=v1
k2=v2
k3=v3
…

保存结果的变量是 tmp。一旦检索到结果,我只想为结果创建一个字典。我试过了:

result={} 
result.update(tmp)

我有

ValueError:字典更新序列元素 #0 的长度为 1;2 是必需的。

我试过这个

result.update(tmp.replace("=",":"))

我也犯了同样的错误。我不想做子字符串来获取键和值,然后使用 d(k1)=v1 来构建字典。还有其他好方法吗?我还可以更改查询并让它生成 k1:v1、k2:v2 等结果...如何在 python 2.4 中为此动态创建字典?谢谢!

4

4 回答 4

2

如果tmp是一串k1 = v1对,每行一个,您需要将它们解析成对:

result = {}
for result in query:
    key, value = result.split('=', 1)
    result[key.strip()] = value.strip()

这假定您的查询返回单个'key1=value1'字符串以拆分为键和值对。

result.update()一系列键值对或另一个字典一起使用。只传入一个字符串是行不通的;Python 将字符串视为单字符的字符串序列,单字符的字符串不符合键值对的要求。

于 2013-07-18T16:46:40.933 回答
1

如果查询结果可以作为 python 脚本存储到文件results.py中,另一种解决方案是使用execfile

$ cat results.py
k1="v1"
k2="v2"
$ python
>>> result = {}
>>> execfile("results.py",{},result)
>>> print result
{'k1': 'v1', 'k2': 'v2'}
于 2013-07-18T17:17:14.420 回答
1

您必须将生成的字符串拆分为行,并将每行拆分为一对字符串。这为您提供了dict构造函数的有效输入:

result = dict(line.strip().split("=", 1) for line in tmp.splitlines())
于 2013-07-18T16:45:55.950 回答
1

听起来您有一个查询字符串。如果是这样的话,那么你最好的朋友就是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())
于 2013-07-18T16:46:00.073 回答