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

自动创建列表和附加元素

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

    在PHP中,您可以简化循环的内部:

    $result = [];
    foreach ($dataset as $dataElement){
        if (isset($result[$dataElement->date])
            array_push($result[$dataElement->date], $dataElement);
        else
            $result[$dataElement->date] = $dataElement;
    }
    

    致:

    $result = [];
    foreach ($dataset as $dataElement){
        $result[$dataElement->date][] = $dataElement;
    }
    

    这基本上是将数据元素附加到子数组中,同时在不存在的情况下动态创建它。

    List.append() 方法绝对正确。

    4 回复  |  直到 7 年前
        1
  •  2
  •   NaturalBornCamper    7 年前

    from collections import defaultdict
    
    result = defaultdict(list)
    for element in dataset:
       result[element.date].append(element)
    

    如果 result 字典不包含 element.date list 创建,否则将使用现有列表,并且在任何一种情况下 element 随附。

        2
  •  1
  •   radix    7 年前

    使用列表理解在一行中完成此操作

    dat = []
    for val in range(1,10):
         dat.append(val)
    

    使用列表理解将变为:

    dat = [val for val in range(1,10) if val (some condition)]
    
        3
  •  0
  •   petezurich rdelmar    7 年前

    我认为您可以尝试通过子类化collections.UserDict类来模拟所需的行为

    from collections import UserDict
    
    class AutoDict(UserDict):
        def __getitem__(self, name):
            if name not in self.data:
                self.data[name] = []
            return self.data[name]
    
    l = AutoDict()
    print('before', l)
    l['some val'].append(2)
    print('after', l)
    
        4
  •  0
  •   ycx    7 年前

    如果您希望满足一个以上的条件。您还可以堆叠更多 if else if else

    a_list = ['twos' if var%2==0 else 'threes' if var%3==0 else var for var in range(0,10)]
    a_list
    >>> ['twos', 1, 'twos', 'threes', 'twos', 5, 'twos', 7, 'twos', 'threes']