簡體   English   中英

將 ._replace 的命名元組字段名稱作為函數的參數傳遞

[英]Passing named tuple field name for a ._replace as an argument from a function

所以我有一個命名元組,說:

from collections import namedtuple

Symbol = namedtuple('Symbol', 'name code industry date_au open high low close volume weekday_au date_utc_unixtimestamp prev_volume', defaults = ('DEFAULT', 'DEF', 'DEFAULT', '01/01/1970', 0.0, 0.0, 0.0, 0.0, 0, 'Mon', 0, 0))

我做了一些測試數據:

ont_data = [
Symbol(name = '1300 SMILES LIMITED', code ='ONT', industry = 'Tech', date_au = '03/05/2020', open = 10.0, high = 12.0, low = 9.5, close = 11.0, volume = 1000, weekday_au = 'Sun', date_utc_unixtimestamp = 123),
Symbol(name = '1300 SMILES LIMITED', code ='ONT', industry = 'Tech', date_au = '15/05/2020', open = 12.0, high = 12.0, low = 5.5, close = 9.0, volume = 999, weekday_au = 'Fri', date_utc_unixtimestamp = 125),
Symbol(name = '1300 SMILES LIMITED', code ='ONT', industry = 'Tech', date_au = '17/01/2020', open = 4.0, high = 90.0, low = 54.5, close = 74.0, volume = 27, weekday_au = 'Wed', date_utc_unixtimestamp = 5)
]

現在我想創建這個命名元組的副本,並對特定屬性進行一些動態替換:

def set_prev_val(symbol, prev_values, field_to_update):
    """
    Iterate over a copy of Symbol named tuple and replace some attribute values.

    Return a copy of Symbol named tuple with replaced previous values of some field_to_update

    args:
      @symbol - A descending sorted named tuple representing stock symbol data
      @prev_values - A list of previous values (from a descending sorted Symbol)
      @field_to_update - A field in a Symbol named tuple to update
   """
    symbol_copy = symbol

    for row in range(0, len(symbol_copy)):
        symbol_copy[row] = symbol[row]._replace(field_to_update = prev_values[row])
    return symbol_copy

當我用prev_values_data = [1,2,3]測試這個時,我得到:

ValueError: Got unexpected field names: ['field_to_update']

凡為我想是的prev_volume領域具有的值更新prev_values_data

我認為不是傳遞field_to_update的字符串值, field_to_update將命名元組中屬性的實際名稱作為參數名稱!!!

有沒有辦法讓我能夠將一些“名稱”屬性作為參數替換為從函數到命名元組中的._replace調用? (假設name存在於命名元組屬性名稱中)

蟒蛇 3.7

創建一個匿名dict並解壓它:

symbol_copy[row] = symbol[row]._replace(**{field_to_update: prev_values[row]})

通過field_to_update=prev_values[row]傳遞的普通關鍵字參數是靜態的; 它將左側作為固定字符串傳遞,而不是變量(它甚至不允許引用它)。 但是dict文字語法需要引用字符串鍵,因此它按預期將field_to_update視為變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM