2008-12-08 77 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()。

相關問題