【问题标题】:Python: Iterate Over Dictionary that Contains Lists and Store the Keys and Values in a StringPython:迭代包含列表并将键和值存储在字符串中的字典
【发布时间】:2014-11-20 08:42:22
【问题描述】:
params={
    'key1': 'value1',
    'key2': ['value_a','value_b']
}

这是我开始的,但它无法处理列表。

str_params = ''
for key, value in params.items():
    print (key,value)
    str_params += '&' + key + '=' + value

我正在尝试生成此字符串。

str_params = '&key1=value1&key2=value_a&key2=value_b'     

【问题讨论】:

  • 您希望str_params 在循环之后是什么样子?
  • str_params = 'key1=value1&key2=value_a&key2=value_b'
  • 所以你要对它进行 url 编码。

标签: python list dictionary iterator


【解决方案1】:

迭代字典只会产生键。如果您希望生成键、值对,请使用items() 方法(Python 2.x 中为iteritems)。

使用urllib.parse.urlencode(Python 2.x 中为urllib.urlencode):

>>> import urllib.parse
>>> urllib.parse.urlencode([
...     (key, x) for key, xs in params.items()
...     for x in ([xs] if isinstance(xs, str) else xs)
... ])
'key2=value_a&key2=value_b&key1=value1'

您可以使用手动字符串操作符,但需要特别注意应为 %xx 编码的特殊字符。

【讨论】:

  • 我稍微修改了我的问题。我最初没有包含我希望字符串的样子。对不起
  • @goopcat,我也相应地修改了答案。看看吧。
  • 谢谢!我不知道 urllib,这正是我正在做的。就像你读懂了我的想法一样,哈哈。
  • @goopcat,如果你给出了预期的输出,那么读懂你的想法会容易得多;)
【解决方案2】:

您需要使用items() 来访问字典中的键和值:

>>> for i,j in params.items():
...  str_params+= '&' +i+'='+str(j)

【讨论】:

  • 肯定是的! ;) 就是这样!
  • str(j) 不会给出 OP 想要的列表。
  • 我知道亲爱的@falsetru 幸运的是你做到了!并投票给我!
猜你喜欢
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
相关资源
最近更新 更多