[英]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.