2016-10-31 47 views
1

我有一個字符串'{"News":"news", "News":"politics", "News":"breaking", "News":"stories"}',我試圖將其轉換爲字典。我用json.loads()ast.literal_eval()來轉換它們,但似乎這兩種方法只採用最後一個鍵值對。字符串字符與多個值爲一個鍵

是否有解決此問題的單線解決方案?或者我需要更復雜的東西?

+1

詞典不能有重複的鍵。 –

+0

我知道;有沒有辦法將這個載入到一個字典中,並且「News」作爲關鍵字並且加載了四個單獨的值? – xtheking

+0

你從哪裏得到這些數據?當然有辦法解析它,但它不會很有趣/很漂亮。 –

回答

3

字典不能有多個實例,每關鍵。這就是爲什麼你不能使用4個相同的密鑰產生字典,News這種情況。

考慮改變數據格式,以滿足您的要求的東西,像一個列表值的字典:

{"News": ["news", "politics", "breaking", "stories"]} 
+0

我只是有這個想法,可能暫時成爲我的解決方案。 – xtheking

+0

許多(大多數)人沒有選擇更改源數據的格式,所以我不知道這通常是多麼適用。 – martineau

3

假設字符串是其他有效JSON,您可以使用object_pairs_hook參數的JSON解碼器:

import json 


def multidict(l): 
    result = {} 
    for k, v in l: 
     result.setdefault(k, []).append(v) 
    return result 

data = '{"News":"news", "News":"politics", ' \ 
     '"News":"breaking", "News":"stories"}' 
data = json.loads(data, object_pairs_hook=multidict) 
assert data == {'News': ['news', 'politics', 'breaking', 'stories']} 
+0

不錯。我不知道[鉤子](https://docs.python.org/2.7/library/json.html#json.load)。 –

3

你可以使用defaultdictlist

>>> from collections import defaultdict 
>>> dictionary = defaultdict(list) 

>>> values = '{"News":"news", "News":"politics", "News":"breaking", "News":"stories"}' 
>>> for pair in values.strip('{}').split(','): 
...  key, value = pair.strip().split(':') 
...  key = key.strip('"') 
...  value = value.strip('"') 
...  dictionary[key].append(value) 

結果:

>>> dictionary 
{'News': ['news', 'politics', 'breaking', 'stories']} 
相關問題