Python 按值传递变量
我有一份字典清单:Python 按值传递变量,python,reference,variable-assignment,key-value,Python,Reference,Variable Assignment,Key Value,我有一份字典清单: list = [{"id":2, "date": "2018-07-12"}] 现在我想生成一些漂亮的输出,并为其提供一个函数: def generateOutput(myList): outputList = [] for l in myList: l['date_short'] = "Jul-12" outputList.append(l) return outputList 这里是de
list = [{"id":2, "date": "2018-07-12"}]
现在我想生成一些漂亮的输出,并为其提供一个函数:
def generateOutput(myList):
outputList = []
for l in myList:
l['date_short'] = "Jul-12"
outputList.append(l)
return outputList
这里是desaster的起点:
output = generateOutput(list)
输出很好,但我需要进一步计算的列表,不应该缺少日期,它有一个新的键,是:
list = [ {"id":2, "date": "2018-07-12", "date_short": "Jul-12" }]
如何克服这个问题?您正在修改
myList
中的词典。相反,您可能希望在向它们添加新值之前单独复制它们。试试这个:
def generateOutput(myList):
outputList = []
for l in myList:
output = l.copy()
output['date_short'] = "Jul-12"
outputList.append(output)
return outputList
另外,您应该避免命名变量
list
,因为list
是Python中预定义类型的名称。您正在修改myList
中的字典。相反,您可能希望在向它们添加新值之前单独复制它们。试试这个:
def generateOutput(myList):
outputList = []
for l in myList:
output = l.copy()
output['date_short'] = "Jul-12"
outputList.append(output)
return outputList
此外,应避免命名变量
list
,因为list
是Python中预定义类型的名称。使用copy
模块将变量的副本传递给函数
import copy
list = [{"id":2, "date": "2018-07-12"}]
def generateOutput(myList):
outputList = []
for l in myList:
l['date_short'] = "Jul-12"
outputList.append(l)
return outputList
generateOutput(copy.copy(list))
使用
copy
模块将变量的副本传递给函数
import copy
list = [{"id":2, "date": "2018-07-12"}]
def generateOutput(myList):
outputList = []
for l in myList:
l['date_short'] = "Jul-12"
outputList.append(l)
return outputList
generateOutput(copy.copy(list))
把名单复印一份?我不明白。如果输出正常,有什么问题?如果您不希望输出具有日期短键,为什么要执行
l['date\u short']=“Jul-12”
?您能否提供一个示例,说明所需输出与实际输出有何不同?您可以传递列表的副本:output=generateOutput(list[:])>有什么问题?这只是为了演示。我需要一个包含保留在核心模块中的原始数据的列表,以及一个发送到输出应用程序的列表。>您可以传递列表的副本:output=generateOutput(list[:])no。小心点,这不起作用。在这种情况下,切片似乎不起作用(字典列表)。把名单复印一份?我不明白。如果输出正常,有什么问题?如果您不希望输出具有日期短键,为什么要执行l['date\u short']=“Jul-12”
?您能否提供一个示例,说明所需输出与实际输出有何不同?您可以传递列表的副本:output=generateOutput(list[:])>有什么问题?这只是为了演示。我需要一个包含保留在核心模块中的原始数据的列表,以及一个发送到输出应用程序的列表。>您可以传递列表的副本:output=generateOutput(list[:])no。小心点,这不起作用。在这种情况下,切片似乎不起作用(字典列表)。谢谢你,我能行。“列表”:谢谢你的好提示(只在这里使用,而不是在原始代码中使用)完成了这项工作,谢谢。“列表”:感谢您的提示(仅在此处使用,不在原始代码中使用)