Передача переменных по значению - PullRequest
0 голосов
/ 19 октября 2018

У меня есть список словарей:

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

И вот, где начинается десастер:

output = generateOutput(list)

вывод в порядке, но список, который мне нужен для дальнейших вычислений и не должен иметь date_short, получил новый ключ:

list = [ {"id":2, "date": "2018-07-12", "date_short": "Jul-12" }]

Как это преодолеть?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Передайте копию переменной в функцию с помощью модуля 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))
0 голосов
/ 19 октября 2018

Вы изменяете словари в 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.

...