我正在为供应商API构建一个python脚本。我在我的回复中收到了以下回复:
[
{
"ID": 3189,
"DefID": 17,
"Value": "Newspaper",
"Name": null,
"ForeignKey": 54245074
},
{
"ID": 3190,
"DefID": 17,
"Value": "Newspaper",
"Name": null,
"ForeignKey": 604567819
},
{
"ID": 3191,
"DefID": 18,
"Value": "TV",
"Name": null,
"ForeignKey": 1169994785
},
etc.
类型最初是<class bytes>
,我已使用转换为<class str>
data_str = data_bytes.decode('utf-8')
然后我试着把它转换成字典,但由于格式的原因,这不起作用。
data_dict = json.loads(data_str)
如何通过DefID
过滤来创建ForeignKeys
及其对应的Value
的字典
示例:
#for defID = 17
data_dict17 = {54245074:"Newspaper", 604567819:"Newspaper"}
#for defID = 18
data_dict18 = {1169994785:"TV"}
感谢您的帮助!
与其有很多不同的变量,不如把它们放在自己的字典里:
from collections import defaultdict
data_dict = defaultdict(dict)
for d in json.loads(data_str):
data_dict[d['DefID']][d['ForeignKey']] = d['Value']
结果:
>>> data_dict
defaultdict(<class 'dict'>, {17: {54245074: 'Newspaper', 604567819: 'Newspaper'}, 18: {1169994785: 'TV'}})
如果您喜欢常规的dict
,则可以在末尾使用data_dict = dict(data_dict)
。
看起来您需要一个按DefID
分组
data = [
{
"ID": 3189,
"DefID": 17,
"Value": "Newspaper",
"Name": None,
"ForeignKey": 54245074
},
{
"ID": 3190,
"DefID": 17,
"Value": "Newspaper",
"Name": None,
"ForeignKey": 604567819
},
{
"ID": 3191,
"DefID": 18,
"Value": "TV",
"Name": None,
"ForeignKey": 1169994785
}
]
res = {}
for i in data:
res.setdefault(i['DefID'], dict()).update({i["ForeignKey"]: i['Value']})
#OR
#res.setdefault(i['DefID'], []).append({i["ForeignKey"]: i['Value']})
print(res[17]) # --> {54245074: 'Newspaper', 604567819: 'Newspaper'}