简体   繁体   English

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

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

I am trying to use data from one json file to update another.我正在尝试使用来自一个 json 文件的数据来更新另一个文件。 In trying to be efficient for searching, I'm attempting to use a lambda expression to locate the correct record to update.为了提高搜索效率,我尝试使用 lambda 表达式来定位要更新的正确记录。

The goal is to be able to most efficiently update the "PreviousMappings" key.目标是能够最有效地更新“PreviousMappings”键。

Code:代码:

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: JSON:

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

This does what you're asking, but you might consider a different approach.这可以满足您的要求,但您可能会考虑采用不同的方法。

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 )

If you have a LOT of files, you might consider building an index, so you can do a direct lookup.如果你有很多文件,你可能会考虑建立一个索引,这样你就可以直接查找。 For example (untested):例如(未经测试):

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

Now you don't have to search -- Python will do it:现在您不必搜索——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