簡體   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