Python 动态创建字典键,以便附加附加值?

Python 动态创建字典键,以便附加附加值?,python,dictionary,Python,Dictionary,我有一个字典,我将向其中添加数据,如下所示: mydict = { 'key1': ['First string message', 'Second string message'], 'key2': ['String message'] } 我正在迭代一个json对象,它有两个键-key和message。我想将每个键添加到mydict中,并附加所有具有相同键的消息 例如: [ { 'key': 'key1', 'message': 'F

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

mydict = {
    'key1': ['First string message', 'Second string message'],
    'key2': ['String message']
}
我正在迭代一个json对象,它有两个键-
key
message
。我想将每个
键添加到
mydict
中,并附加所有具有相同
键的
消息

例如:

[
    {
        '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']
但这会失败,因为类型错误:只能将列表(而不是“str”)连接到列表


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

您应该使用
defaultdict
setdefault
。我更喜欢
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'])