Python中如何从字典提取指定键并添加至另一个字典?
问题
目标是从包含多组键值对的boss_list字典中取出指定键(存储在bossname变量中),添加到空字典boss_timers_dict中,该键对应的值存储在min变量中。现有代码如下:
import time import asyncio boss_list = { "test": 20, "hi": 3, "170": 80, } boss_timers_dict = {} async def boss_down(bossname, min): due_at = int(time.time()+(min)) hm_from_now = int(due_at) - int(time.time()) due_in_six = int(due_at) - int(time.time() + int(6)) print("timed msg here...") for hm_from_now in range(due_at): if hm_from_now == min: # 此处为问题所在 if bossname in boss_list: boss_timers_dict.update([bossname]) coro = asyncio.sleep(1) await coro del boss_timers_dict[bossname] break
尝试过以下写法但未成功:
if bossname in boss_list: boss_timers_dict.update(bossname)
请问正确的实现方式是什么?
正确实现方式
你之前的写法出错是因为字典的update()方法要求传入字典对象或者由键值对组成的可迭代对象,直接传字符串或单元素列表不符合方法的参数要求。要把bossname对应的键值对加入boss_timers_dict,有两种简单的正确写法:
直接赋值(最直观)
这是操作字典最常用的方式,直接通过键名赋值即可:if bossname in boss_list: boss_timers_dict[bossname] = min使用
update()方法
如果一定要用update(),需要传入包含键值对的结构:if bossname in boss_list: # 传入字典 boss_timers_dict.update({bossname: min}) # 或者传入键值对元组组成的列表 boss_timers_dict.update([(bossname, min)])
另外提一句:你代码里的循环逻辑有明显问题——range(due_at)会生成从0到due_at-1的整数序列,而hm_from_now == min的判断逻辑大概率和你想要的定时逻辑不符,要是后续定时功能出问题,得重点排查这块。
内容的提问来源于stack exchange,提问作者Oia
相关产品推荐
相关产品推荐

