在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()
方法。
答案 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