擅长:python、mysql、java
<p>除非你知道列表的结构(例如按价格排序,或者只有三个项目可以有这样的价格),否则我们不能使算法比线性时间快。所以无论如何我们必须循环。你知道吗</p>
<h2>列表理解</h2>
<p>我们可以使用列表理解,例如:</p>
<pre><code>[d for d in l if d.get('price') == 50]
</code></pre>
<p>(这也会过滤掉没有price属性的字典)。你知道吗</p>
<h2>熊猫</h2>
<p>我们也可以用熊猫。Pandas是一个高效的数据帧库,在数据量很大的情况下,它的性能往往优于Python循环。在这种情况下,我们可以在datframe中加载字典,对其执行过滤,然后检索字典列表。请注意,这些将是不同的字典(即包含相同数据的其他对象)。因此数据被“复制”。你知道吗</p>
<pre><code>import pandas as pd
df = pd.DataFrame(l)
result = list(df[df.price == 50].T.to_dict().values())
</code></pre>
<p>所以这里我们用<code>df.price == 50</code>过滤。请注意,在窗帘后面有一些用于过滤的回路。你知道吗</p>
<p>这也是一种更具声明性的方法:代码更多地解释了<em>它在做什么,而不是<em>如何</em>。如何过滤并不是您的问题,语法相当优雅地显示您正在过滤数据。你知道吗</p>