python - 使用列表中的值过滤字典中的键、值

标签 python list dictionary

假设我有一个这样的字典:

d = {27: 32, 28: 41, 29: 29, 30: 29, 31: 67, 32: 65}

还有一个列表:

l = [27, 30, 31]

for n in l:
            d2 = {k:v for k,v in d.items() if k in n}

为什么这是不允许的?我可以做什么?

最佳答案

以这种方式得到过滤后的字典就足够了:

d = {27: 32, 28: 41, 29: 29, 30: 29, 31: 67, 32: 65}
l = set([27, 30, 31])
d2 = {k:v for k,v in d.items() if k in l}

print(d2)

输出:

{27: 32, 30: 29, 31: 67}

表达式 ... if k in n 在你的列表理解中迭代 for n in l: 意味着你正在搜索数字中的数字键( number) - 就像我们在 27 中搜索 27,这在这种情况下毫无意义。
此外,set 对象在大序列的情况下更可取。

Membership testing with sets and dictionaries is much faster, O(1), than searching sequences, O(n)

关于python - 使用列表中的值过滤字典中的键、值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40643461/

相关文章:

C# 集合已修改;枚举操作可能无法执行

python - 如何使用 Python 在 Odoo 11 中的发票上创建计算字段?

python - 使用 Python 循环处理多个 csv 文件并从特定列的非空单元格中提取行

ruby - 如何将字符串列表转换为 ruby​​ 中的一个字符串?

包含整数和字符串的列表的Python排序列表,其中包含整数

java - 将表示键值对的字符串转换为 Map

java - 使用java构建字典

python - 在阿拉伯语中查找两个子字符串之间的字符串

python - 在列表理解中省略迭代器?

.net - 当我们对子列表应用条件时,如何过滤父列表<>?