Вот еще одно решение без BigDecimals
Truncate:
(math floor 1.23456789 * 100) / 100
Round:
(math rint 1.23456789 * 100) / 100
Или для любого двойного n и точности p:
def truncateAt(n: Double, p: Int): Double = { val s = math pow (10, p); (math floor n * s) / s }
Аналогично может быть сделано для функции округления, на этот раз с использованием currying:
def roundAt(p: Int)(n: Double): Double = { val s = math pow (10, p); (math round n * s) / s }
, который более многоразовый, например при округлении денежных сумм можно использовать следующее:
def roundAt2(p: Int) = roundAt(2)(p)
Вы можете получить ключи для словаря с помощью dict.keys ().
Вы можете включить это в набор с помощью set (dict.keys ())
Вы можете сравните множества с ==
Подводя итог:
set(d_1.keys()) == set(d_2.keys())
даст вам то, что вы хотите.
Быстрый вариант (не уверен, что его наиболее оптимальный)
len(set(d_1.keys()).difference(d_2.keys())) == 0
dict.keys()
возвращает объект просмотра ", который может использоваться как набор. Это намного эффективнее, чем создание отдельного набора. d_1.keys() == d_2.keys()
dict.viewkeys()
делает то же самое. d_1.viewkeys() == d_2.viewkeys()
set(d_1) == set(d_2)
Или вы можете перебирать ключи самостоятельно для большей эффективности памяти. len(d_1) == len(d_2) and all(k in d_2 for k in d_1)
В Python2,
set(d_1) == set(d_2)
В Python3 вы можете сделать это, что может быть немного более эффективным, чем создание множеств
d1.keys() == d2.keys()
, хотя способ Python2 будет работать тоже
Один из способов - проверить симметричную разницу (новый набор с элементами в s или t, но не для обоих):
set(d_1.keys()).symmetric_difference(set(d_2.keys()))
Но более короткий путь к простому сравните множества:
set(d_1) == set(d_2)
>>> not set(d_1).symmetric_difference(d_2)
False
>>> not set(d_1).symmetric_difference(dict.fromkeys(d_1))
True
keys
. – SilentGhost 9 July 2010 в 09:09iter(a_dict)
возвращает итератор,a_dict.keys()
возвращает список; поэтомуset(d_1.keys())
берет на себя создание и уничтожение временного списка ключей словаря. В Python 3 они эквивалентны. – tzot 11 July 2010 в 10:24