我有一个这样的字典列表:
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'
每次都会重新计算字符串的哈希值?