0

我认为这很简单。我要做的就是'code'用另一个具有该值的字典更新原始字典。我感觉 2 for 循环和 IF 循环可以进一步缩短以获得答案。在我的实际问题中,我需要更新的字典只有几千个。多谢你们!

Python:

referencedict = {'A': 'abc', 'B': 'xyz'}

mylistofdict = [{'name': 'John', 'code': 'A', 'age': 28}, {'name': 'Mary', 'code': 'B', 'age': 32}, {'name': 'Joe', 'code': 'A', 'age': 43}]

for eachdict in mylistofdict:
    for key, value in eachdict.items():
        if key == 'code':
            eachdict[key] = referencedict[value]

print mylistofdict

输出:

[{'age': 28, 'code': 'abc', 'name': 'John'}, {'age': 32, 'code': 'xyz', 'name': 'Mary'}, {'age': 43, 'code': 'abc', 'name': 'Joe'}]
4

2 回答 2

4

不需要遍历 的所有值eachdict,直接查找code即可:

for eachdict in mylistofdict:
    if 'code' not in eachdict:
        continue
    eachdict['code'] = referencedict[eachdict['code']]

您可能可以省略code存在的测试,您的示例列表始终包含一个code条目,但我认为最好是安全的。在 referencedict 结构中查找代码假定所有可能的代码都可用。

if 'code' not in eachdict: continue在这里用过;反之亦然 ( if 'code' in eachdict),但这样您可以在不需要时更轻松地删除该行,并为自己节省一个缩进级别。

于 2012-06-25T14:30:34.990 回答
2
referencedict = {'A': 'abc', 'B': 'xyz'}

mylistofdict = [{'name': 'John', 'code': 'A', 'age': 28}, {'name': 'Mary', 'code': 'B', 'age': 32}, {'name': 'Joe', 'code': 'A', 'age': 43}]

for x in mylistofdict:
   try: 
    x['code']=referencedict.get(x['code'])
   except KeyError:
       pass
print(mylistofdict)
于 2012-06-25T14:35:11.550 回答