Нет, нет способа вызвать strftime()
с определенной локалью.
Предполагая, что ваше приложение не является многопоточным, сохраните и восстановите существующий язык и установите для вашей локали значение 'C'
, когда вы вызываете strftime
.
#! /usr/bin/python3
import time
import locale
def get_c_locale_abbrev():
lc = locale.setlocale(locale.LC_TIME)
try:
locale.setlocale(locale.LC_TIME, "C")
return time.strftime("%a-%b")
finally:
locale.setlocale(locale.LC_TIME, lc)
# Let's suppose that we're french
locale.setlocale(locale.LC_ALL, 'fr_FR.utf8')
# Should print french, english, then french
print(time.strftime('%a-%b'))
print(get_c_locale_abbrev())
print(time.strftime('%a-%b'))
Если вы предпочитаете with:
- try:
- finally:
, вы можете разбить менеджер контекста:
#! /usr/bin/python3
import time
import locale
import contextlib
@contextlib.contextmanager
def setlocale(*args, **kw):
saved = locale.setlocale(locale.LC_ALL)
yield locale.setlocale(*args, **kw)
locale.setlocale(locale.LC_ALL, saved)
def get_c_locale_abbrev():
with setlocale(locale.LC_TIME, "C"):
return time.strftime("%a-%b")
# Let's suppose that we're french
locale.setlocale(locale.LC_ALL, 'fr_FR.utf8')
# Should print french, english, then french
print(time.strftime('%a-%b'))
print(get_c_locale_abbrev())
print(time.strftime('%a-%b'))
] Предполагая, что teaherList
предназначен для массива объектов, вот метод, который не требует в зависимости от библиотеки, а также создает выходной объект за один проход (итоговые итерации = длина массива) с помощью reduce
:
const teaherList = [
{teacherID:1,teacherName:"john"},
{teacherID:2,teacherName:"joe"},
{teacherID:3,teacherName:"jill"},
{teacherID:1,teacherName:"john"},
{teacherID:2,teacherName:"joe"},
{teacherID:3,teacherName:"jill"},
{teacherID:1,teacherName:"john"},
{teacherID:2,teacherName:"joe"},
{teacherID:3,teacherName:"jill"},
];
console.log(
teaherList.reduce((a, { teacherName }) => (
Object.assign(a, { [teacherName]: (a[teacherName] || 0) + 1 })
), {})
);
Я немного изменил этот параметр teaherList, потому что это не действительный объект. Вы можете попробовать что-то вроде этого, результирующий массив будет таким [{teacherID1: teacherName1}, {teacherID2: teacherName2}].
var teaherList = [
{teacherID:1,teacherName:"john"},
{teacherID:2,teacherName:"joe"},
{teacherID:3,teacherName:"jill"},
{teacherID:1,teacherName:"john"},
{teacherID:2,teacherName:"joe"},
{teacherID:3,teacherName:"jill"},
{teacherID:1,teacherName:"john"},
{teacherID:2,teacherName:"joe"},
{teacherID:3,teacherName:"jill"},
]
var result = teaherList.reduce(function(acc, cV) {
if(!acc[cV.teacherName]) {
acc[cV.teacherName]= {teacherID: cV.teacherID,
teacherName: cV.teacherName,
count: 1};
} else {
acc[cV.teacherName].count++;
}
return acc;
}, {});
console.log(result);
Надеюсь, это поможет.
let temp = []
_.each(teaherList, function(k){
temp.push(k.teacherID)
)
let count1 = countBy(temp);
console.log(count1) // object
//(1:3,2:3,3:3)
, пожалуйста, дайте мне знать, если есть лучший способ этого
Вы можете использовать Array#forEach
без накладных расходов для назначения объекта и возврата объекта для каждого цикла.
var teacherList = [{ teacherID: 1, teacherName: "john" }, { teacherID: 2, teacherName: "joe" }, { teacherID: 3, teacherName: "jill" }, { teacherID: 1, teacherName: "john" }, { teacherID: 2, teacherName: "joe" }, { teacherID: 3, teacherName: "jill" }, { teacherID: 1, teacherName: "john" }, { teacherID: 2, teacherName: "joe" }, { teacherID: 3, teacherName: "jill" }],
frequency = Object.create(null);
teacherList.forEach(({ teacherName }) => frequency[teacherName] = (frequency[teacherName] || 0) + 1);
console.log(frequency);
Вот еще один способ сделать это, используя цикл while.
teaherList = [{teacherID:1,teacherName:"john"},{teacherID:2,teacherName:"joe"},{teacherID:3,teacherName:"jill"},{teacherID:1,teacherName:"john"},{teacherID:2,teacherName:"joe"},{teacherID:3,teacherName:"jill"},{teacherID:1,teacherName:"john"},{teacherID:2,teacherName:"joe"},{teacherID:3,teacherName:"jill"}];
const calculateFrequencies = ({ input, output = Object.create(null), id, name,
start: i = 0, end = input.length }) => {
while(i < end && ({ teacherID: id, teacherName: name } = input[i++]))
++(output[id] || (output[id] = { id, name, count: 0 })).count;
return Object.values(output);
}
console.log(calculateFrequencies({ input: teaherList }));