python中循环中值赋值的奇怪行为

2024-07-01 08:12:47 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我在堆栈溢出中的第一个问题(善良点….哈哈)

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'}}

我认为两个版本中的逻辑是相同的,只是想知道是什么导致函数的第一个版本中出现奇怪的行为


Tags: 函数no元素dataelementatavailablestate

热门问题