Мои CSV-файлы не назначаются правильному ключу в словаре - PullRequest
0 голосов
/ 01 марта 2020
def read_prices(tikrList):
#read each file and get the price list dictionary 
  def getPriceDict():
    priceDict = {}
    TLL = len(tikrList)
    for x in range(0,TLL):
      with open(tikrList[x] + '.csv','r') as csvFile:
        csvReader = csv.reader(csvFile)
        for column in csvReader:
          priceDict[column[0]] = float(column[1])
    return priceDict

#populate the final dictionary with the price dictionary from the previous function
  def popDict():
    combDict = {}
    TLL = len(tikrList)
    for x in range(0,TLL):
      for y in tikrList:
        combDict[y] = getPriceDict()
    return combDict
  return(popDict())

print(read_prices(['GOOG','XOM','FB']))

Что не так с кодом, так это то, что когда я возвращаю последний словарь, ключ для GOOG, XOM, FB представляет значения только для словаря FB.

Как вы можете видеть из этого вывод:

{'GOOG': {'2015-12-31': 104.660004, '2015-12-30': 106.220001},
 'XOM': {'2015-12-31': 104.660004, '2015-12-30': 106.220001},
 'FB': {'2015-12-31': 104.660004, '2015-12-30': 106.220001}

У меня есть 3 разных файла CSV, но все они просто читают файл CSV для FB.

Я хочу заранее извиниться, если мой код не легко читается или не имеет смысла. Я думаю, что есть проблема с хранением значений и возвращением priceDict в функции getPriceDict, но я не могу понять это.

Любая помощь приветствуется, спасибо!

1 Ответ

0 голосов
/ 01 марта 2020

Поскольку это классная работа, я не буду предлагать решение, но я укажу несколько вещей.

  • Вы определили три функции - две определены внутри в третьих. Хотя структурирование таких функций может иметь смысл для некоторых проблем / решений, я не вижу никакой выгоды в вашем решении. Кажется, это усложняет ситуацию.
  • Две внутренние функции не имеют никаких параметров, вы можете реорганизовать их так, чтобы при их вызове вы передавали им необходимую информацию. Одним из преимуществ функции является инкапсуляция идеи / процесса в автономный кодовый блок, который не зависит от ресурсов external . Это облегчает тестирование, так что вы знаете, что функция работает, и вы можете сосредоточиться на других частях кода.

Этот фрагмент вашего кода не имеет особого смысла - он никогда не использует x из внешнего l oop:

...
    for x in range(0,TLL):
      for y in tikrList:
        combDict[y] = getPriceDict()

Когда вы перебираете список итерация остановится после последнего элемента, и она будет выполнять итерацию по самим элементам - нет необходимости итерировать по номерам для доступа к элементам: не делайте for i in range(thelist): print(thelist[i])

>>> tikrList = ['GOOG','XOM','FB']
>>> for name in tikrList:
...     print(name)

GOOG
XOM
FB
>>> 

Когда вы читаете учебник или документацию, не просто смотрите на примеры - читайте и понимайте текст.

...