这是我在堆栈溢出中的第一个问题(善良点….哈哈)
After some comments I decided to simplify the question.
我有一个函数,它接受以下输入
toProcessData = {'STUDENTID': 'datasource.id',
'NAME': 'datasource.name',
'ADDRESS': 'datasource.address',
'STATE': 'datasource.state'}
dataSource = {'datasource.id':'1231231',
'datasource.name':'John Smith'}
该函数应根据以下规则生成一个新词典
如果TopProcessData中某个元素的值作为数据源中的键存在,例如示例中的前两个元素(STUDENTID,NAME)。输出应为以下形式的新字典元素:
{toProcessData[key]:dataSource[value]}
如果TopProcessData中的某个元素的值在dataSource中找不到键,如示例中最后两个元素(地址、状态)的情况。输出应为以下形式的新字典元素:
{toProcessData[key]:{'NO_DATA_AVAILABLE_AT':toProcessData[value]}}
当我这样编写函数时:
def processData (toProcessData, dataSource):
noDataDescription = {'NO_DATA_AVAILABLE_AT':""}
extractedElements = {}
for element in toProcessData.items():
elementValue = element[1]
elementKey = element[0]
if elementValue in list(dataSource.keys()):
extractedElements[elementKey] = dataSource[elementValue]
else:
extractedElements[elementKey] = noDataDescription
extractedElements[elementKey]['NO_DATA_AVAILABLE_AT'] = elementValue
return extractedElements
输出如下所示:
{'STUDENTID': '1231231',
'NAME': 'John Smith',
'ADDRESS': {'NO_DATA_AVAILABLE_AT': 'datasource.state'},
'STATE': {'NO_DATA_AVAILABLE_AT': 'datasource.state'}}
密钥地址与datasource.state匹配,而不是与datasource.ADDRESS匹配
但是,当我这样编写函数时:
def processData01 (toProcessData, dataSource):
extractedElements = {}
for element in toProcessData.items():
elementValue = element[1]
elementKey = element[0]
if elementValue in list(dataSource.keys()):
extractedElements[elementKey] = dataSource[elementValue]
else:
extractedElements[elementKey] = {'NO_DATA_AVAILABLE_AT':elementValue}
return extractedElements
输出看起来是正确的
{'STUDENTID': '1231231',
'NAME': 'John Smith',
'ADDRESS': {'NO_DATA_AVAILABLE_AT': 'datasource.address'},
'STATE': {'NO_DATA_AVAILABLE_AT': 'datasource.state'}}
我认为两个版本中的逻辑是相同的,只是想知道是什么导致函数的第一个版本中出现奇怪的行为
目前没有回答
相关问题 更多 >
编程相关推荐