Переименование ** kwargs для перехода на другой метод - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть следующие методы. Я пытался передать несколько переменных первому методу, а затем переименовать их, прежде чем передать их второму методу.

def method2(**kwargs):
    # Print kwargs
    for key in kwargs:
        print(key, kwargs[key])

def method1(**kwargs):
    # Need to rename kwargs to pass in to method2 below
    # Keys are method1 kwargs variables and values are method 2 kwargs variables

    rename_dict = {'Val1': 'val_1', 'Val2': 'val_2', 'Val3': 'val_3'}
    new_kwargs = {}

    # The kwargs passed in method 1 need to their values to be set to the 
    # corresponding variables in the rename_dict before they are pass in method 2

    method2(**new_kwargs)

method1(Val1 = 5, Val2 = 6)

# Output desired
val_1 5
val_2 6

Ответы [ 3 ]

1 голос
/ 04 апреля 2020

Вы могли бы написать это более кратко с пониманием слова:

new_kwargs = {rename_dict[key]: value for key, value in kwargs.items()}
1 голос
/ 04 апреля 2020

Для переименования ключей dict вы можете использовать следующее:

new_kwargs = {rename_dict[key]:value in key,value for kwargs.items()}

Кроме того, вы можете перебрать словарь в python, используя items(), который возвращает список кортежей (ключ, значение ) и вы можете распаковать их прямо в вашем l oop:

def method2(**kwargs):
    # Print kwargs
    for key, value in kwargs.items():
        print(key, value)
0 голосов
/ 04 апреля 2020

Я смог сделать это, добавив для l oop в первом методе

def method2(**kwargs):
    # Print kwargs
    for key in kwargs:
        print(key, kwargs[key])

def method1(**kwargs):
    # Need to rename kwargs to pass in to method2 below
    # Keys are method1 kwargs variables and values are method 2 kwargs variables

    rename_dict = {'Val1': 'val_1', 'Val2': 'val_2', 'Val3': 'val_3'}
    new_kwargs = {}
    for key in kwargs:
        new_kwargs[rename_dict[key]] = kwargs[key]
    print(new_kwargs)
    # The kwargs passed in method 1 need to their values to be set to the 
    # corresponding variables in the rename_dict before they are pass in method 2

    method2(**new_kwargs)

method1(Val1 = 5, Val2 = 6)

# Output

{'val_1': 5, 'val_2': 6}
val_1 5
val_2 6

Я не знал, что вы можете передавать имена переменных в виде строк в методе python. Я надеюсь, что смогу помочь кому-то, пытающемуся сделать то же самое!

...