同时遍历两个字符串列表

时间:2020-06-04 13:32:11

标签: python string iteration

我找到了希望得到的答案here

就我而言,我有2个字符串列表。从此代码:

fields = POST[ 'fields' ]
values = POST[ 'row' ]

for ( field, value ) in zip( fields, values ):
    f.write(   f'  field {field}, value {value}\n' )

...这就是我得到的:

row: [4,1,"AAR",null,null,"Aardvark Ltd",null,"2019-07-20 00:00:00","modem - ring first","M",null,null,"",null,null]
fields: ["id","category","code","title","firstname","secondname","salutation","lastcon","sendconventions","stdsendmethod","vatno","refquote","notes","created","lastmodif"]
  field [, value [
  field ", value 4
  field i, value ,
  field d, value 1
  field ", value ,
  field ,, value "
  field ", value A
  field c, value A
  field a, value R
  field t, value "
  ...

它将字符串分成字符,甚至包括方括号,引号和逗号。我该如何预防?我希望它在迭代时列出成对的字符串(每个列表中有1对)。

3 个答案:

答案 0 :(得分:0)

我假设您正在从http请求正文中获取这些字段和值。 在这种情况下,您可以使用literal_eval https://docs.python.org/3/library/ast.html#ast.literal_eval将数据转换为实际的python列表并对其进行迭代。

在您的情况下:

from ast import literal_eval
fields = literal_eval(POST['fields'])
values = literal_eval(POST['row'])

,然后尝试遍历它们。

答案 1 :(得分:0)

@mike: 您是否检查过以确保它们确实是列表中的第一名?您可以使用以下命令来做到这一点:

    print(type(fields)) 
    print(type(values)) 

使用zip遍历两个列表的一般方法以及您的操作方式确实是正确的。但是,我认为您正在处理请求包中的对象,而不是列表。

答案 2 :(得分:0)

根据您的输出,字段和值是str,而不是list。一种解决方案可能涉及使用python的list将值转换为ast.literal_eval

from ast import literal_eval
fields = literal_eval(POST['fields'])
values = literal_eval(POST['row'])

for field, value in zip(fields, values):
    f.write(f'  field {field}, value {value}\n')

有关ast.literal_eval的更多信息,请参见here