代码之家  ›  专栏  ›  技术社区  ›  ScottieB

将N>=1个元素附加到列表中

  •  0
  • ScottieB  · 技术社区  · 7 年前

    my_list = []    
    for j in jsons:
      my_list.append(j['foo'])
    

    my_list 最终成为 ['a1', 'b1', ['c1', 'c2']]

    如果我使用extend,我会得到 ['a', '1', 'b', '1', 'c1', 'c2'] .

    2 回复  |  直到 7 年前
        1
  •  3
  •   Laurent LAPORTE    7 年前

    是的,您需要明确检查每个项目类型。

    例如,您可以编写:

    # sample jsons
    jsons = [{'foo': 'a1'},
             {'foo': 'b1'},
             {'foo': ['c1', 'c2']}]
    
    my_list = []
    for json in jsons:
        item = json['foo']
        if isinstance(item, list):
            my_list.extend(item)
        else:
            my_list.append(item)
    

    ['a1', 'b1', 'c1', 'c2']
    

    但是,有了Python,您可以使用 ternary conditional expression 为了简化:

    my_list = []
    for json in jsons:
        item = json['foo']
        my_list.extend(item if isinstance(item, list) else [item])
    
        2
  •  2
  •   chepner    7 年前

    singledispatch 装饰师将一些样板文件移出主循环。装饰师可从 functools 单一分派 PyPi上的模块。

    adder 根据其(第一个)参数的类型,其行为有所不同。

    @singledispatch
    def adder(item):
        mylist.append(item)
    
    @adder.register(list)
    def _(item):
        mylist.extend(item)
    
    mylist = []
    for json in jsons:
        adder(json['foo'])