2012-06-21 47 views
2

我的問題如下。我們有字典,所有的鍵和值都是unicode,例如:如何將unicoded字典轉換爲字符串

ab = { 
    u'a': u'A', 
    u'b': u'B', 
    u'c': u'C', 
} 

我想將其轉換爲字符串。顯然,當我做的:

str(ab) 

我將得到:

"{u'a': u'A', u'c': u'C', u'b': u'B'}" 

如果我做的:

unicode(ab) 

我將得到:

u"{u'a': u'A', u'c': u'C', u'b': u'B'}" 

我期望的結果是:

"{'a': 'A', 'c': 'C', 'b': 'B'}" 

目前我發現,如果我做了json.dumps,它會將它正確地轉換爲每個鍵和值前沒有額外'u'的字符串,但它也會將True更改爲true和其他javascript方言區別。

任何解決方法不同於我的數據結構遞歸迭代?

+3

你想用這個字符串表示來實現什麼? –

+0

我同意這裏的目標可能很重要,關於最好的方法(或不)要做到這一點。 –

+0

遺留代碼,它只是假設我們在數據庫中有字符串化的數據結構,可以在檢索時解碼 – Drachenfels

回答

8

不,你將需要手動將每個項目轉換爲一個字符串,然後字符串的字典,並注意,除非Unicode數據碰巧都是ASCII,你可能會遇到問題。做這樣的假設,你可以使用一個字典的理解,使其更快,更簡潔:

print({str(key): str(value) for key, value in ab.items()}) 
{'a': 'A', 'c': 'C', 'b': 'B'} 

如果您之前2.7.3使用Python版本,沒有字典內涵:

dict((str(key), str(value)) for key, value in ab.items()) 
+0

OP解釋了爲什麼他們不想使用JSON。 –

+0

@SvenMarnach排序,但(s)他沒有解釋他們將使用這些數據的原因以及爲什麼將它保留爲Python文字很重要。在大多數情況下,從JSON編碼/解碼是一個更好的主意。 –

+0

由於問題在評論中得到進一步解釋,我刪除了關於JSON的註釋 - 無論如何,在這種情況下使用它幾乎同樣糟糕。 –

0

如果您使用的是Python 2.x:

dict(map(str, item) for item in ab.iteritems()) 
+0

爲什麼這是2.x專屬?將iteritems()調用爲3.x的items()調用很容易。 –

+0

@Lattyware:在3.x中使用字典理解會更好 – GeneralBecos

+1

2.7.3中存在字典解析。 –