在由字典构成的列表里查找

2012-09-24 15:19:58 +08:00
 ThunderEX
listA = [{'ID'=14, ...},
{'ID'=15, ...},
...,
]
写一个简单好看的表达式,如果listA里面有'ID'==14的字典,就返回True?
3154 次点击
所在节点    Python
10 条回复
skyleft
2012-09-24 15:25:46 +08:00
y=lambda listA:bool([x for x in listA if x['ID']==14])
reus
2012-09-24 15:26:22 +08:00
any(map(lambda d: d.get('ID', None) == 14, l))
013231
2012-09-24 15:27:38 +08:00
any(item['id'] == 14 for item in listA)
reus
2012-09-24 15:35:48 +08:00
这个比刚才的更快,因为是generator,遇到为True的就直接返回了,不用遍历整个list
any(d for d in l if d.get('ID', None) == 14)
比如l = [{'ID': 14}] * 5000000,用这个会秒回,map的话慢很多= =
ThunderEX
2012-09-24 15:37:44 +08:00
@reus 谢~我们用的是2.4.3没有any()……跪了……
skyleft
2012-09-24 15:47:57 +08:00
@reus 赞generator
013231
2012-09-24 15:50:13 +08:00
@ThunderEX 没有自己寫一個就是了.
http://gist.github.com/3774827
ThunderEX
2012-09-24 15:53:44 +08:00
@013231 就是临时用一次,所以问问有没有一个表达式就OK的写得好看,没有的话就老老实实写for好了……
Veelian
2012-09-24 16:28:22 +08:00
你确定list里是字典?
ThunderEX
2012-09-24 16:32:25 +08:00
@Veelian 我已经发现自己把冒号写成等号了……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/48612

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX