次のような辞書のリストがあります。
data = [{'x': 1, 'y': 10},
{'x': 3, 'y': 15},
{'x': 2, 'y': 1},
... ]
と値matplotlib.axis.plot
のリストを必要とする関数 (たとえば) があります。だから私は辞書を「転置」しなければならない」.x
y
最初の質問: この操作を何と呼びますか? 「トランスポーズ」は正しい用語ですか?
私はこれを試しましたが、効率的な方法を探しています(おそらくいくつかの特別なnumpy
機能があります):
x = range(100)
y = reversed(range(100))
d = [dict((('x',xx), ('y', yy))) for (xx, yy) in zip(x,y)]
# d is [{'y': 99, 'x': 0}, {'y': 98, 'x': 1}, ... ]
timeit.Timer("[dd['x'] for dd in d]", "from __main__ import d").timeit()
# 6.803985118865967
from operator import itemgetter
timeit.Timer("map(itemgetter('x'), d)", "from __main__ import d, itemgetter").timeit()
# 7.322326898574829
timeit.Timer("map(f, d)", "from __main__ import d, itemgetter; f=itemgetter('x')").timeit()
# 7.098556041717529
# quite dangerous
timeit.Timer("[dd.values()[1] for dd in d]", "from __main__ import d").timeit()
# 19.358459949493408
より良い解決策はありますか?私の疑問は次のとおりです。これらの場合、文字列のハッシュは'x'
毎回再計算されますか?