我有一个字符串'{"News":"news", "News":"politics", "News":"breaking", "News":"stories"}'
,我试图将其转换为字典。我用json.loads()
和ast.literal_eval()
来转换它们,但似乎这两种方法只采用最后一个键值对。字符串字符与多个值为一个键
是否有解决此问题的单线解决方案?或者我需要更复杂的东西?
我有一个字符串'{"News":"news", "News":"politics", "News":"breaking", "News":"stories"}'
,我试图将其转换为字典。我用json.loads()
和ast.literal_eval()
来转换它们,但似乎这两种方法只采用最后一个键值对。字符串字符与多个值为一个键
是否有解决此问题的单线解决方案?或者我需要更复杂的东西?
假设字符串是其他有效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']}
不错。我不知道[钩子](https://docs.python.org/2.7/library/json.html#json.load)。 –
你可以使用defaultdict
与list
:
>>> 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']}
词典不能有重复的键。 –
我知道;有没有办法将这个载入到一个字典中,并且“News”作为关键字并且加载了四个单独的值? – xtheking
你从哪里得到这些数据?当然有办法解析它,但它不会很有趣/很漂亮。 –