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

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

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

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

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

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

© 2021 V2EX