Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy:一本字典_Python_Numpy_Dictionary - Fatal编程技术网

Python Numpy:一本字典

Python Numpy:一本字典,python,numpy,dictionary,Python,Numpy,Dictionary,我正在努力做一件很简单的事情。。。 给定一个以整数为键、列表为值的简单字典 a = {} a[0] = ['HI','HOME'] a[1] = ['tree','car', 'food'] print(a) {0: ['HI', 'HOME'], 1: ['tree', 'car', 'food']} 我只想得到一个键的列表/np.array: [0,0,1,1,1] 我试图寻找一个映射函数,但我没有找到任何东西。。。 感谢使用np.repeat和maple- 样本运行- In

我正在努力做一件很简单的事情。。。 给定一个以整数为键、列表为值的简单字典

a = {}

a[0] = ['HI','HOME']
a[1] = ['tree','car', 'food']

print(a)    
{0: ['HI', 'HOME'], 1: ['tree', 'car', 'food']}
我只想得到一个键的列表/np.array:

[0,0,1,1,1]
我试图寻找一个映射函数,但我没有找到任何东西。。。 感谢使用np.repeat和maple-

样本运行-

In [152]: a
Out[152]: {0: ['HI', 'HOME'], 1: ['tree', 'car', 'food']}

In [153]: np.repeat(a.keys(), map(len,a.values()))
Out[153]: array([0, 0, 1, 1, 1])
或者,我们可以使用列表理解来获得长度。因此,maplen,a.值可以替换为-

[len(i) for i in a.values()]
我认为,对于Python3.x,我们需要用map来包装列表-


我认为专门针对中小型阵列的最优化方法是使用嵌套列表,如下所示:

In [66]: [key for key, val in a.items() for _ in val]
Out[66]: [0, 0, 1, 1, 1]
以下是一个基准测试,其他答案要快得多:

In [75]: %timeit np.repeat(list(a.keys()), list(map(len, a.values())))
100000 loops, best of 3: 5.18 us per loop

In [76]: %timeit [key for key, val in a.items() for _ in val]
1000000 loops, best of 3: 558 ns per loop
对于最大的数据集,您应该使用numpy,但在计算键和值长度时有一些更改:

a = {i:[3, 4, 5]*1000 for i in range(1000)}

In [86]: %timeit [key for key, val in a.items() for _ in val]
10 loops, best of 3: 54.7 ms per loop

In [87]: %timeit np.repeat(list(a.keys()), list(map(len, a.values())))
100 loops, best of 3: 9.18 ms per loop

In [88]: %timeit np.repeat(list(a), [len(i) for i in a.values()])
100 loops, best of 3: 9.12 ms per loop

在Python3中,np.repeat不接受keys对象。您必须将其转换为列表。此外,我认为在大多数情况下,使用一个列表理解比执行所有这些操作和函数调用更优化。@Kasramvd谢谢!更新了。为更大的数据集添加计时?您是否也可以添加设置以创建更大的a?@Divakar我也在考虑添加那个。刚刚更新。@Divakar我没有在timeit中创建字典!我并不是想在timeit中加入创建时间的设置。我的意思是,这样我就可以看到最大的数据集有多大,在我的终端使用该设置,并在我的终端测试计时。
In [75]: %timeit np.repeat(list(a.keys()), list(map(len, a.values())))
100000 loops, best of 3: 5.18 us per loop

In [76]: %timeit [key for key, val in a.items() for _ in val]
1000000 loops, best of 3: 558 ns per loop
a = {i:[3, 4, 5]*1000 for i in range(1000)}

In [86]: %timeit [key for key, val in a.items() for _ in val]
10 loops, best of 3: 54.7 ms per loop

In [87]: %timeit np.repeat(list(a.keys()), list(map(len, a.values())))
100 loops, best of 3: 9.18 ms per loop

In [88]: %timeit np.repeat(list(a), [len(i) for i in a.values()])
100 loops, best of 3: 9.12 ms per loop