动态创建字典键,可以在其中附加其他值?

时间:2019-02-18 20:46:23

标签: python dictionary

我有一个字典,将向其中添加数据,如下所示:

mydict = {
    'key1': ['First string message', 'Second string message'],
    'key2': ['String message']
}

我正在遍历具有两个键-keymessage的json对象。我想将每个key添加到mydict中,并附加所有具有相同message的{​​{1}}。

示例:

key

我在动态构建字典时遇到了问题。如何动态创建密钥,以便可以附加其他字符串?

我尝试过的方法之一是:

[
    {
        'key': 'key1',
        'message': 'First string message'
    },
    {
        'key': 'key2',
        'message': 'String message'
    },
    {
        'key': 'key1',
        'message': 'Second string message'
    },
    {
        'key': 'key3',
        'message': 'Brand new string message'
    }
]

很显然,这没有达到我的预期结果,因为import json response = [ { 'key': 'key1', 'message': 'First string message' }, { 'key': 'key2', 'message': 'String message' }, { 'key': 'key1', 'message': 'Second string message' }, { 'key': 'key3', 'message': 'Brand new string message' } ] mydict = {} for r in response: mydict[r['key']] = mydict.get(r['key'], [r['message']]) print(mydict) {'key1': ['First string message'], 'key2': ['String message'], 'key3': ['Brand new string message']} 不包含两个字符串。

我尝试过:

key1

但这失败了,for r in response: mydict[r['key']] = mydict.get(r['key'], [r['message']]) + r['message']

如何动态创建密钥,以便可以附加其他字符串?

1 个答案:

答案 0 :(得分:3)

您应该使用defaultdictsetdefault。我更喜欢defaultdict

from collections import defaultdict

response = [
    {
        'key': 'key1',
        'message': 'First string message'
    },
    {
        'key': 'key2',
        'message': 'String message'
    },
    {
        'key': 'key1',
        'message': 'Second string message'
    },
    {
        'key': 'key3',
        'message': 'Brand new string message'
    }
]

mydict = defaultdict(list)

for r in response:
    mydict[r['key']].append(r['message'])

借助setdefault,您可以使mydict成为常规词典:

mydict = {}
for r in response:
    mydict.setdefault(r['key'], []).append(r['message'])