2011-04-29 91 views
8

我有一本字典說..蟒蛇加入相當於

dict = { 
    'a' : 'b', 
    'c' : 'd' 
} 

在PHP中我會喜歡的東西破滅( '',$字典),並得到輸出 'A,B,C,d' 我如何在Python中做到這一點?

+1

詞典在Python是無序的。只是以爲你想知道。 – 2011-04-29 04:46:44

+3

並且爲了記錄,我不明白downvotes。這是一個有着迷人答案的合法問題。 – 2011-04-29 04:55:32

+1

@Ignacio - 我也想知道。我在下面回答的動機是回答這個問題。如果我的(被認定爲不雅)答案是錯誤的,我會理解爲低估。嘆息 – mishaF 2011-04-29 04:57:16

回答

6

這似乎是最簡單的方法:

>>> from itertools import chain 
>>> a = dict(a='b', c='d') 
>>> ','.join(chain(*a.items())) 
'a,b,c,d' 
+0

你不需要列表()在那裏 – 2011-04-29 04:57:46

+0

@gnibbler,確實是固定的。 – 2011-04-29 04:59:35

+0

thx mate。所有我需要:) – 2011-04-29 06:36:42

-1

dictList = dict.items()

這將返回所有項目的列表。

+0

這將返回**對值**(元組或其他) – 2011-04-29 05:03:18

0

這是不是很優雅,但工作原理:詞典詞條的這樣一個扁平列表上

result=list() 
for ind in g: 
    result.append(ind) 
    for cval in g[ind]: 
     result.append(cval) 
4

使用字符串join

",".join(i for p in dict.items() for i in p) 

此外,你可能想使用OrderedDict

+0

+1 - 就像您的解決方案。 – manojlds 2011-04-29 05:01:03

1
a=[] 
[ a.extend([i,j]) for i,j in dict.items() ] 
1

要麼

[value for pair in {"a": "b", "c" : "d"}.iteritems() for value in pair] 

(lambda mydict: [value for pair in mydict.iteritems() for value in pair])({"a": "b", "c" : "d"}) 

說明:

簡化該例子中是從每對在mydict

編輯返回的每個值:也把一個「」加入()圍繞這些。我沒有看過你的問題正確

5

首先,錯誤答案:

','.join('%s,%s' % i for i in D.iteritems()) 

這個答案是錯誤的,因爲,而在PHP 關聯數組做有一個給定的順序,詞典在Python 不要。以補償的方式是要麼使用一個有序映射類型(如OrderedDict),或迫使一個明確的順序:

','.join('%s,%s' % (k, D[k]) for k in ('a', 'c')) 
2

這有二次性能,但如果字典總是很小,可能不此事給你

>>> sum({'a':'b','c':'d'}.items(),()) 
('a', 'b', 'c', 'd') 

注意,dict.items()不保留順序,以( 'C', 'd', 'A', 'b')也將是一個可能的輸出

1

我知道這是一個古老的問題,但它也很好的說明。

原來的問題是誤導。爆()不弄平在PHP關聯數組,它加入的值

echo implode(",", array("a" => "b", "c" => "d")) 
// outputs b,d 

破滅()將是相同的

",".join(dict.values()) 
# outputs b,d