2008-12-08 34 views
6

我需要将列表(或字典)转换为用逗号分隔的列表以传递给另一种语言。将数据结构格式化为逗号分隔的参数列表

是否有这样做比的更好的方式:

result = '' 
args = ['a', 'b', 'c', 'd'] 

i = 0 
for arg in args: 
    if i != 0: result += arg 
    else:   result += arg + ', ' 
    i += 1 

result = 'function (' + result + ') 

感谢, 丹

+0

如果我没有弄错,结果为'function(a,bcd)' – hop 2008-12-08 12:09:02

回答

11
'function(%s)' % ', '.join(args) 

产生

'function(a, b, c, d)' 
12

', '.join(args)会做的伎俩。

+2

如果参数不是全部字符串,'''.join(map(str,args))将很好地工作。 – 2008-12-08 11:11:04

+1

或','.join(args中x的str(x)) – 2008-12-08 11:13:07

+0

感谢S.和James对此StackOverflow文章的额外评论。这正是我所需要的。 – Chris 2010-01-14 06:35:06

0

为什么不使用标准的两种语言可以解析,如JSON,XML或YAML? simplejson非常方便,并且包含在python 2.6中的json中。

1
result = 'function (%s)' % ', '.join(map(str,args)) 

我建议,而不是仅仅ARGS地图(STR,参数),因为你的一些参数可能不是字符串,并会造成一个TypeError,例如,在你列表中的int参数:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: sequence item 0: expected string, int found 

当你进入字典对象,你可能会想用英文逗号分隔的字典(大概是因为值是你想传递给这个函数是什么)的值。如果做的字典对象本身的连接方法,你会拿到钥匙分开,就像这样:

>>> d = {'d':5, 'f':6.0, 'r':"BOB"} 
>>> ','.join(d) 
'r,d,f' 

你想要的是以下几点:

>>> d = {'d':5, 'f':6.0, 'r':"BOB"} 
>>> result = 'function (%s)' % ', '.join(map(str, d.values())) 
>>> result 
'function (BOB, 5, 6.0)' 

注意你会遇到新的问题,然而。当你通过join函数传递一个字符串参数时,它会失去引用。因此,如果您计划传递字符串,则在传入函数时(通常用许多通用语言引用字符串),通常会包含字符串的引号丢失。但是,如果你只是传递数字,这对你来说不是问题。

有可能是解决我刚才所描述的问题的更好的方式,但这里有一个方法,可以为你工作。

>>> l = list() 
>>> for val in d.values(): 
... try: 
...  v = float(val) #half-decent way of checking if something is an int, float, boolean 
...  l.append(val) #if it was, then append the original type to the list 
... except: 
...  #wasn't a number, assume it's a string and surround with quotes 
...  l.append("\"" + val + "\"") 
... 
>>> result = 'function (%s)' % ', '.join(map(str, l)) 
>>> result 
'function ("BOB", 5, 6.0)' 

现在字符串已经引用了自身。如果你传递比数字原语和字符串更复杂的类型,那么你可能需要一个新的问题:)

最后一点:我一直在使用d.values()来显示如何从字典中提取值,但实际上它会以几乎任意的顺序返回字典中的值。由于你的函数很可能需要特定顺序的参数,你应该手动构造你的值列表,而不是调用d.values()。

相关问题