字符串到具有键的多个值的字典

时间:2016-10-31 20:45:20

标签: python string python-2.7 dictionary

我有一个字符串'{"News":"news", "News":"politics", "News":"breaking", "News":"stories"}',我试图将其转换为字典。我已使用json.loads()ast.literal_eval()来转换它们,但似乎两种方法都只使用最后一个键值对。

这个问题是否有单行解决方案?或者我需要更复杂的东西吗?

3 个答案:

答案 0 :(得分:4)

假设该字符串是有效的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']}

答案 1 :(得分:3)

每个键的字典不能有多个实例。这就是为什么你不能生成一个包含4个相同键的字典,News就是这种情况。

考虑将数据格式更改为符合您的规范的内容,例如具有列表值的字典:

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

答案 2 :(得分: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']}