Я построить словарь из листа первенствовать и в конечном итоге что-то вроде:Как быстро получить список ключей от Dict
d = {('a','b','c'): val1, ('a','d'): val2}
кортежей, которые я использую в качестве клавиши содержат несколько значений, цель для получения списка этих значений, которые встречаются более определенного количества раз.
Я пробовал два решения, оба из которых занимают слишком много времени.
Покушение 1, простой список постижение фильтр:
keyList = []
for k in d.keys():
keyList.extend(list(k))
# The script makes it to here before hanging
commonkeylist = [key for key in keyList if keyList.count(key) > 5]
Это займет навсегда, так как list.count()
проходит по меньшей мере на каждой итерации понимания.
Попытка 2, создать счета словарь
keyList = []
keydict = {}
for k in d.keys():
keyList.extend(list(k))
# The script makes it to here before hanging
for k in keyList:
if k in keydict.keys():
keydict[k] += 1
else:
keydict[k] = 1
commonkeylist = [k for k in keyList if keydict[k] > 50]
я думал, что это будет быстрее, так как мы пересекаем только все KeyList горсть раз, но до сих пор висит сценарий.
Какие еще меры я могу предпринять для повышения эффективности этой операции?
не использовать .keys, то есть создать список. Вам также не нужно вызывать список по k –