В python 3.x keys()
, values()
и items()
верните views. Теперь, когда мнения, безусловно, имеют преимущества, они также, похоже, вызывают некоторые проблемы совместимости. Например, с matplotlib
(в конечном счете это с numpy
). В качестве примера this и this ответы на вопросы о stackexchange работают нормально с python 2.x, но вызывают исключение при выполнении их в python 3.4.
Минимальным примером может быть:
import matplotlib.pyplot as plt
d = {1: 2, 2: 10}
plt.scatter(d.keys(), d.values())
Что повышает TypeError: float() argument must be a string or a number, not 'dict_values'
с помощью python 3.4.
В то время как для минимального примера Исключение совершенно ясное, вопрос this возникает из-за той же проблемы, и здесь Исключение намного менее ясное: TypeError: ufunc 'isfinite' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
Какова наилучшая практика для решения этой проблемы? Можем ли мы надеяться, что в новой версии matplotlib
(или, в конечном счете, numpy
) эта проблема будет решена или мы должны начать писать такие вещи, как list(dict.values())
при использовании matplotlib
, чтобы убедиться, проблема с python 3.x?