我有一个字典,将向其中添加数据,如下所示:
mydict = {
'key1': ['First string message', 'Second string message'],
'key2': ['String message']
}
我正在遍历具有两个键-key
和message
的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']
如何动态创建密钥,以便可以附加其他字符串?
答案 0 :(得分:3)
您应该使用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'])