繁体   English   中英

Python lambda 表达式 - 字符串索引必须是整数

[英]Python lambda expression - string indices must be integers

我正在尝试使用来自一个 json 文件的数据来更新另一个文件。 为了提高搜索效率,我尝试使用 lambda 表达式来定位要更新的正确记录。

目标是能够最有效地更新“PreviousMappings”键。

代码:

for p in Path('jobs/data').glob('*.json'):
        with open(p, 'r') as f:
            print('Loaded - ', f.name)
            jdata = json.load(f)
            for j in jdata['Mappings']:
                jc = j['Job Code']
                with open('newdata/jobs.json', 'r+') as s:
                    print('Loaded - ', s.name)
                    data = json.load(s)
                    found = list(filter(lambda x:x['Jobcode'] == jc, data)) #throws exception

JSON:

      {
"JobCodes": [
            {
                "Bid Code": "123-456",
                "Description": "JOB DESCRIPTION",
                "Jobcode": "ABC123",
                "PreviousMappings": ""
            }
    ]
}

这可以满足您的要求,但您可能会考虑采用不同的方法。

data = json.load( open('newdata/jobs.json', 'r')  )

for p in Path('jobs/data').glob('*.json'):
    with open(p, 'r') as f:
        print('Loaded - ', f.name)
        jdata = json.load(f)
        for j in jdata['Mappings']:
            jc = j['Job Code']
            for k in data:
                if k['Jobcode'] == jc:
                    k['PreviousMappings'] = "something"
                    break

json.dump( open('newdata/jobs.json','w'), data )

如果你有很多文件,你可能会考虑建立一个索引,这样你就可以直接查找。 例如(未经测试):

data = json.load( open('newdata/jobs.json', 'r')  )
dindex = {}
for k in data:
    dindex[k['Jobcode']] = k

现在您不必搜索——Python 会这样做:

        for j in jdata['Mappings']:
            jc = j['Job Code']
            if jc in dindex:
                dindex[jc]['PreviousMappings'] = "something"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM