繁体   English   中英

根据列表迭代中的值删除字典项

[英]Delete a dictionary item based on a value from a list iteration

我尝试了以下方法:

losers = ['e', 'b']
candidates_and_fp_votes = {'a': 24, 'b': 0, 'c': 17, 'd': 23, 'e': 0}
for i in losers:
    del candidates_and_fp_votes[losers[i]]
print(candidates_and_fp_votes)

这只会返回错误:

TypeError:列表索引必须是整数或切片,而不是str

我想遍历失败者和删除每个项目candidates_and_fp_votes其中有一个关键的losers

我期望输出:

{'a': 24, 'c': 17, 'd': 23}

我怎么解决这个问题?

提前致谢。

i是列表元素,而不是索引。 它应该是:

del candidates_and_fp_votes[i]

或者应该是:

for i in in range(len(losers)):

如果您确实出于某种原因想要索引。

当您遍历对象(在本例中为“失败者”的列表)时,变量i实际上是对象中的数据,而不是您在其他语言(c / c ++)中可能看到的数据索引。 因此,在for循环的第一次迭代中, i == 'e'然后在第二次i == 'b'则循环将结束,因为没有更多数据。

因此,您要做的就是将失败者[i]更改为i:

del candidates_and_fp_votes[i]

这是固定行的完整代码。

losers = ['e', 'b']
candidates_and_fp_votes = {'a': 24, 'b': 0, 'c': 17, 'd': 23, 'e': 0}
for i in losers:
    del candidates_and_fp_votes[i]
print(candidates_and_fp_votes)

您的索引i是一个字符串,而不是整数。 您可以执行以下操作:

losers = ['e', 'b']

candidates_and_fp_votes = {'a': 24, 'b': 0, 'c': 17, 'd': 23, 'e': 0}

for i in losers:

     if i in candidates_and_fp_votes:
          del candidates_and_fp_votes[i]

print(candidates_and_fp_votes)

您可以使用字典理解:

losers = ['e', 'b']
candidates_and_fp_votes = {'a': 24, 'b': 0, 'c': 17, 'd': 23, 'e': 0}
final_dict = {a:b for a, b in candidates_and_fp_votes.items() if a not in losers}

输出:

{'a': 24, 'c': 17, 'd': 23}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM