如何解决筛选字典'like'字符串
我正在为供应商API构建python脚本。我在响应正文中得到以下回报:
[
{
"ID": 3189,"DefID": 17,"Value": "Newspaper","Name": null,"ForeignKey": 54245074
},{
"ID": 3190,"ForeignKey": 604567819
},{
"ID": 3191,"DefID": 18,"Value": "TV","ForeignKey": 1169994785
},etc.
该类型最初为<class bytes>
,并且我已经通过使用转换为<class str>
data_str = data_bytes.decode('utf-8')
然后我尝试将其转换为字典,但是由于格式原因,该方法不起作用。
data_dict = json.loads(data_str)
如何通过ForeignKeys
过滤Value
及其对应的DefID
的字典?
示例:
#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,"ForeignKey": 604567819
},{
"ID": 3191,"DefID": 18,"Value": "TV","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'}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。