我有非有序数据,有时我想通过查看所有条目来分析,有些时候我只想选择一个条目。
p1 x1 x2 x3 x4
p2 x1 x2 x3 x4
p33 x1 x2 x3 x4
p3 x1 x2 x3 x4
p4 x1 x2 x3 x4
Dictionary
似乎是一种很好的格式来存储数据,因为它没有排序,如果我想得到p33
,它可能在表中的任何位置,我可以通过{{1 }}。这个查找需要一些时间,但我想比循环整个数据更快找到我想要的行(至少这是我所宣传的优势dict["p33"]
应该买我)。
如果我想查看整个数据,例如计算x3为零的次数,我应该循环所有行,并通过类型dict
的for循环来执行它太慢。我的印象是获取密钥然后执行for item in dict.keys():
会进行大量无用的查找,因为对于每个项目,它必须在字典中找到它,而对于我的目标则足够好以便按顺序读取“就好像这是一个清单“。
所以我想知道是否有更快的方法来循环字典的所有条目。
由于
答案 0 :(得分:0)
如果可能使用numpy / pandas ......
对我来说,Python只适用于高级编程,而低级是C ++ ......所以如果可能的话,使用现有的c ++函数,这些函数位于numpy pandas或其他库中..
检查出来......
>>> import numpy as np, pandas as pd
>>> p1 = np.arange(10)
>>> dct = dict(
... p1 = np.arange(10),
... p2 = np.ones(10),
... p3 = np.zeros(10),
... p33 = np.ones(10)*10,
... p4 = np.linspace(0,1,10))
>>>
>>> dct
{'p2': array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]), 'p33': array([ 10., 10., 10., 10., 10.,
10., 10., 10., 10., 10.]), 'p1': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 'p4': array([ 0. , 0.11111111, 0.22222222, 0.33333333, 0.44444444,
0.55555556, 0.66666667, 0.77777778, 0.88888889, 1. ]), 'p3': array([ 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0.])}
>>> from pprint import pprint as pr
>>> pr(dct)
{'p1': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),
'p2': array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]),
'p3': array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]),
'p33': array([ 10., 10., 10., 10., 10., 10., 10., 10., 10., 10.]),
'p4': array([ 0. , 0.11111111, 0.22222222, 0.33333333, 0.44444444,
0.55555556, 0.66666667, 0.77777778, 0.88888889, 1. ])}
>>> df = pd.DataFrame(dct)
>>> df
p1 p2 p3 p33 p4
0 0 1.0 0.0 10.0 0.000000
1 1 1.0 0.0 10.0 0.111111
2 2 1.0 0.0 10.0 0.222222
3 3 1.0 0.0 10.0 0.333333
4 4 1.0 0.0 10.0 0.444444
5 5 1.0 0.0 10.0 0.555556
6 6 1.0 0.0 10.0 0.666667
7 7 1.0 0.0 10.0 0.777778
8 8 1.0 0.0 10.0 0.888889
9 9 1.0 0.0 10.0 1.000000
>>> df.T
0 1 2 3 4 5 6 \
p1 0.0 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000
p2 1.0 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
p3 0.0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
p33 10.0 10.000000 10.000000 10.000000 10.000000 10.000000 10.000000
p4 0.0 0.111111 0.222222 0.333333 0.444444 0.555556 0.666667
7 8 9
p1 7.000000 8.000000 9.0
p2 1.000000 1.000000 1.0
p3 0.000000 0.000000 0.0
p33 10.000000 10.000000 10.0
p4 0.777778 0.888889 1.0
>>> df = df.T
>>> df.columns = ['x%d'%(n+1) for n in df.columns.values]
>>> df
x1 x2 x3 x4 x5 x6 x7 \
p1 0.0 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000
p2 1.0 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
p3 0.0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
p33 10.0 10.000000 10.000000 10.000000 10.000000 10.000000 10.000000
p4 0.0 0.111111 0.222222 0.333333 0.444444 0.555556 0.666667
x8 x9 x10
p1 7.000000 8.000000 9.0
p2 1.000000 1.000000 1.0
p3 0.000000 0.000000 0.0
p33 10.000000 10.000000 10.0
p4 0.777778 0.888889 1.0
>>> df.x3
p1 2.000000
p2 1.000000
p3 0.000000
p33 10.000000
p4 0.222222
Name: x3, dtype: float64
>>> df.x3 == 0
p1 False
p2 False
p3 True
p33 False
p4 False
Name: x3, dtype: bool
>>> np.sum(df.x3 == 0)
1
>>>