在Python中从字典列表中获取特定索引项的列表(列表推导)

3 投票
5 回答
2115 浏览
提问于 2025-04-15 11:59

我有一个字典的列表,像这样:

listDict = [{'id':1,'other':2},{'id':3,'other':4},{'id':5,'other':6}]

我想从这些字典中提取出所有的id。所以,从这个列表中,我想得到这样的一个列表:

[1,3,5]

这个操作应该用一行代码就能完成。我之前做过,只是忘了具体的写法...谢谢!

5 个回答

2

这个方法在概念上更好看,而且根据你的数据量大小,可能会更快。

我们可以使用pandas这个工具,把键当作列标题来简单处理数据,并用相同的键来分组值:

import pandas as pd
listDict = [{'id':1,'other':2},{'id':3,'other':4},{'id':5,'other':6}]
df = pd.DataFrame(listDict)

# Then just reference the 'id' column to get a numpy array of it
df['id']

# or just get a list
df['id'].tolist()

下面有一些性能测试的结果,明显可以看出在处理大数据时,pandas的表现更好。小数据的测试只用了3个条目,而大数据的测试则有15万个条目:

setup_large = "listDict = [];\
[listDict.extend(({'id':1,'other':2},{'id':3,'other':4},\
{'id':5,'other':6})) for _ in range(50000)];\
from operator import itemgetter;import pandas as pd;\
df = pd.DataFrame(listDict);"

setup_small = "listDict = [];\
listDict.extend(({'id':1,'other':2},{'id':3,'other':4},{'id':5,'other':6}));\
from operator import itemgetter;import pandas as pd;\
df = pd.DataFrame(listDict);"

method1 = '[item["id"] for item in listDict]'
method2 = "df['id'].tolist()"

import timeit
t = timeit.Timer(method1, setup_small)
print('Small Method LC: ' + str(t.timeit(100)))
t = timeit.Timer(method2, setup_small)
print('Small Method Pandas: ' + str(t.timeit(100)))

t = timeit.Timer(method1, setup_large)
print('Large Method LC: ' + str(t.timeit(100)))
t = timeit.Timer(method2, setup_large)
print('Large Method Pandas: ' + str(t.timeit(100)))

#Small Method LC: 8.79764556885e-05
#Small Method Pandas: 0.00153517723083
#Large Method LC: 2.34853601456
#Large Method Pandas: 0.605192184448
2

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,但其实很多时候,只要我们仔细查看错误信息,就能找到解决办法。

比如说,当你在运行代码时,可能会看到一些提示信息,这些信息通常会告诉你哪里出错了,或者是什么原因导致了问题。理解这些提示信息是解决问题的关键。

另外,很多时候,其他程序员也会遇到类似的问题,所以在网上查找解决方案,比如在StackOverflow上提问或搜索,往往能找到有用的答案和建议。

总之,遇到问题时,不要慌张,先仔细阅读错误信息,然后尝试寻找解决方案,或者向社区寻求帮助。这样,你会逐渐变得更加熟练和自信。

[i['id'] for i in listDict]
13

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,但其实很多时候,解决方法并不复杂。

比如,有人可能在使用一个特定的功能时,发现它没有按照预期工作。这时候,我们可以尝试检查一下代码,看看是否有拼写错误,或者是否遗漏了某些必要的步骤。

另外,查看官方文档也是一个好主意,里面通常会有详细的说明和示例,帮助我们更好地理解如何使用这个功能。

总之,遇到问题时,不要慌张,先冷静下来,仔细检查代码和相关资料,很多时候问题就能迎刃而解。

>>> listDict = [{'id':1,'other':2},{'id':3,'other':4},{'id':5,'other':6}]
>>> [item["id"] for item in listDict]
[1, 3, 5]

撰写回答