зацикливание и присвоение значений во вложенном dict / list python - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть эта проблема вместо того, чтобы каждый вложенный dict [список] получал свои собственные значения, когда l oop перебирает ticker_list, они все получают одинаковые значения.

любая помощь будет принята с благодарностью. Приветствия

ticker_list = ("AUD_USD","EUR_USD","USD_JPY","NZD_USD","EUR_JPY","GBP_USD","AUD_JPY")
granularity = "M15"

Defaults = {"bias":"x",
               "Top_times":[0,0],
                 'Active_prices': [0, 0]}        
active_dict = dict.fromkeys(ticker_list, Defaults)


pp.pprint(active_dict)


def active_range(ticker_list,direction,ref,active_dict):
    try:
        for ticker in ticker_list:
            print(ticker)

    ### these 2 values below will be populated from pandas calculations hidden 
### for simplification, i have used simple assignments to help show problem
            toptime = ticker+"time"
            long_t_price = "23"+ticker

            active_dict = upkeep_dict(active_dict,ticker,"Top_times",toptime)
            active_dict = upkeep_dict(active_dict,ticker,"Active_prices",long_t_price)


        return active_dict            
    #exception removed for simplification        



def upkeep_dict(active_dict_temp,ticker,path,new_item,list_limit=2):
## Check length of list is not > list_limit ###

    if len(active_dict_temp[ticker][path])>(list_limit-1):
        active_dict_temp[ticker][path].pop(0)
        active_dict_temp[ticker][path].append(new_item)
    else:
        active_dict_temp[ticker][path].append(new_item)
    return active_dict_temp

когда я ввожу это

fff = active_range(ticker_list,"Long",0,active_dict)

я получаю это для fff

{'AUD_USD': {'bias': 'x',
  'Top_times': ['GBP_USDtime', 'AUD_JPYtime'],
  'Active_prices': ['23GBP_USD', '23AUD_JPY']},
 'EUR_USD': {'bias': 'x',
  'Top_times': ['GBP_USDtime', 'AUD_JPYtime'],
  'Active_prices': ['23GBP_USD', '23AUD_JPY']},
 'USD_JPY': {'bias': 'x',

вместо этого

 {'AUD_USD': {'bias': 'x',
  'Top_times': ['0', 'AUD_USDtime'],
  'Active_prices': [0, '23AUD_USD']},
 'EUR_USD': {'bias': 'x',
  'Top_times': ['0', 'EUR_USDtime'],
  'Active_prices': ['0', '23EUR_USD']},
 'USD_JPY': {'bias': 'x',    

что я делаю неправильно?

1 Ответ

0 голосов
/ 28 апреля 2020

Проблема с первоначальным созданным Dict была неизменной.

, изменив ее на эту строку после того, как ее исправил импорт.

active_dict = {ticker: copy.deepcopy (Defaults) для тикера в списке тикеров}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...