如何为字典d中各键对应列表的元素追加d2内的匹配值
错误原因分析
d.update(k[i]=d2.get(x))语法不合法:Python中关键字参数只能是字面量标识符,不能是k[i]这类表达式,而且你要修改的是字典值(列表)内的元素,不需要调用字典的update方法。- 第二种尝试的问题:首先内外层循环的变量
v重名导致值被覆盖,其次你是把两个值拼接为字符串,和你需要的二维列表结构不符,另外代码中x变量未定义,也会导致运行失败。
正确实现代码
原地修改原字典
for k, val_list in d.items(): for idx, origin_val in enumerate(val_list): matched_val = d2.get(origin_val) if matched_val is not None: # 直接通过索引替换列表元素为要求的二维结构 val_list[idx] = [origin_val, matched_val]
该方法直接修改原字典d,不需要额外占用内存存储新字典。
生成新字典(不改动原数据)
# 如果需要保留d2中不存在的key,可以把d2[origin_val]改成d2.get(origin_val, 自定义默认值) new_d = { k: [[origin_val, d2[origin_val]] for origin_val in val_list if origin_val in d2] for k, val_list in d.items() }
补充说明
因为列表是Python中的可变对象,直接通过索引val_list[idx]赋值,就会同步修改字典d中对应键的值,不需要额外对字典执行更新操作。
内容的提问来源于stack exchange,提问作者user3423407
相关产品推荐
相关产品推荐

