过滤字典"喜欢"字符串



我正在为供应商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'}

相关内容

最新更新