问题遍历kwarg值python

问题描述 投票:3回答:2

我正在尝试使用kwargs创建我的第一个函数,并且在循环时遇到了一些麻烦。

我要传递两个kwarg:滴答声和开始声。勾号和开始号都将是字符串或字符串列表。

我想遍历kwarg以使用if elif对其进行分类,并包含正确的字符串和kwarg

[当kwarg通过测试时,我想获取该kwarg的值,并将其附加到与它的名称列表匹配的列表中(即,刻度线进入刻度线列表)

目前,我将所有kwargs值都添加到列表中,而不是我正在处理的kwarg值中。

[kwarg,kwargs和kwarg感到困惑的抱歉之间有区别。

def fn1(**kwargs):
    ticks = []
    start = []

    # Iterating over the Python kwargs dictionary

for kwarg in kwargs: # For each kwarg in kwargs
        if "ticks" in kwarg:   #Test if "tick" in kwarg. If yes continue to line below, if not skip the next two lines
            for kwarg in kwargs.values():  #for each i in kwargs values  THIS IS WRONG
                    ticks.append(kwarg)
                    break  # I use this to fix what is wrong 

        elif "start" in kwarg:
                for kwarg in kwargs.values(): #Same problem as 5 lines up, and now I do not know how to either skip the first iteration of the loop or fix the original problem
                    start.append(kwarg)

    print(ticks, start)

输入:

fn1(ticks= ["IBM", "AAPL"], start= "2")

输出:

[['IBM', 'AAPL']] [['IBM', 'AAPL'], '2']

所需的输出:

[['IBM', 'AAPL']] ['2']
python loops kwargs
2个回答
1
投票

不确定源代码中的逻辑,但是我做了一个可行的解决方案,可以返回所需的输出。

def fn1(**kwargs):
    ticks = []
    start = []

    for kwarg, values in kwargs.items():  # For every kwarg in kwargs
        if kwarg == "ticks":
            ticks.append(values)

        elif kwarg == "start":
            start.append(values)

    print(ticks, start)


fn1(ticks=["IBM", "AAPL"], start="2")

输出

 # python test123.py
[['IBM', 'AAPL']] ['2']

在输出中,我看到您想将传递的kwarg值添加到数组中,但是在源代码中您正在对其进行迭代。不确定您到底在寻找什么,所以我已经通过获取所需的输出来完成它:)


1
投票

您的for循环太多。当您使用**kwargs时,它将创建一个名为kwargs的字典。

fn1(ticks= ["IBM", "AAPL"], start= "2")

将创建一个这样的字典:

{'ticks': ['IBM', 'AAPL'],
 'start': '2'}

您正在遍历这些键,然后遍历每个匹配键的所有值。

如果摆脱了外部for循环,则只需检查给定的字符串是否在字典中即可。然后,您可以遍历该键的值。

def fn1(**kwargs):
    ticks = []
    start = []

    if "ticks" in kwargs:
        for kwarg in kwargs['ticks']:
            ticks.append(kwarg)
    elif "start" in kwargs:
        for kwarg in kwargs['start']: 
            start.append(kwarg)
    print('Ticks: {}'.format(ticks))
    print('Start: {}'.format(start))

但是如果您只是将所有内容都附加到字典中,则可能完全不使用循环,而直接使用字典中的值即可。

def fn1(**kwargs):
    print('Ticks: {}'.format(kwargs.get('ticks', [])))
    print('Start: {}'.format(kwargs.get('start', [])))

[请记住,在您提供的示例结果中,start是一个列表,但是您提供的是字符串。如果希望start作为列表,则应提供start=['2']

© www.soinside.com 2019 - 2024. All rights reserved.