自动创建列表和追加元素

时间:2018-12-13 12:39:58

标签: python

在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;
}

如果不存在,则在将其动态创建时基本上将数据元素添加到子数组。

是否有可能像Python这样简单的单线?似乎我需要该数组存在,然后绝对调用List.append()方法。

4 个答案:

答案 0 :(得分:1)

使用列表推导功能在一行内完成此操作

所以:

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

使用列表理解成为此:

dat = [val for val in range(1,10) if val (some condition)]

答案 1 :(得分:1)

我认为这可能是您想要的:

from collections import defaultdict

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

如果result词典中不包含element.date条目,则会创建一个新的list,否则将使用现有列表,并且无论哪种情况都将附加element

答案 2 :(得分:0)

我认为您可以尝试通过对collection.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)

答案 3 :(得分:0)

如果您希望满足多个条件。您还可以在列表理解中堆叠更多>>> d={'Night': {'time': '22:00:00', 'setPoint': 140}, 'Day': {'time': '08:00:00', 'setPoint': 139}, 'Morning': {'time': '06:00:00', 'setPoint': 110}, 'Evening': {'time': '18:00:00', 'setPoint': 130}} >>> [v['time'] for v in d.values()] ['22:00:00', '08:00:00', '06:00:00', '18:00:00'] if else if。参见以下示例。

else