【问题标题】:Generating a list from another list using List comprehension in python [duplicate]在python中使用列表理解从另一个列表生成列表[重复]
【发布时间】:2020-07-09 04:45:48
【问题描述】:

我正在尝试遍历一个列表并生成另一个列表。这可以使用列表理解来实现吗?

source = ['1/2','1/3','1/4']
port_hdl_dict  = {'1/2':'1/1/2','1/3':'1/1/3','1/4':'1/1/4','1/5':'1/1/5'}

def getSourcePortlistIxia(source_list,port_hdl_dict):
    source_port_list = []
    for i in source_list:
        source_port_list.append(port_hdl_dict[i])

    return(source_port_list)


res = getSourcePortlistIxia(source,port_hdl_dict)
print(res)

我尝试使用列表理解来实现这一点

source_port_list = []
my_list = [source_port_list.append(port_hdl_dict[i]) for i in source]
print(my_list)

但这会将输出打印为

['1/1/2', '1/1/3', '1/1/4']
[None, None, None]

我在这里做错了吗?我们如何做到这一点?

【问题讨论】:

标签: python


【解决方案1】:
my_list = [port_hdl_dict.get(v) for v in source]

【讨论】:

    【解决方案2】:

    从列表生成列表或另一个可迭代结构是列表理解的最佳用例之一。您的代码的问题是 append 操作不返回任何内容。因为这就是你在my_list 中存储的内容,所以当你打印my_list 时,你会得到[None, None, None]

    此外,在我看来,您实际上想要做的是从字典中获取给定键集的所有值。

    您可以通过在列表理解中返回字典中的值而不是使用附加到的第三个列表来实现这一点,如下所示:

    my_list = [port_hdl_dict[i] for i in source]
    

    上面是一个非常幼稚的例子,没有验证。因此,例如,如果i 不是port_hdl_dict 中的有效键,那么您的代码将引发异常。 您可以通过简单地检查 i 是否在 port_hdl_dict 中来添加一些简单的验证

    my_list = [port_hdl_dict[i] for i in source if i in port_hdl_dict]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-19
      • 2013-12-29
      • 2023-01-08
      • 2013-04-18
      • 2018-04-20
      • 1970-01-01
      • 2013-01-26
      • 1970-01-01
      相关资源
      最近更新 更多