2016-10-31 49 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']} 
相关问题