Python问题:如何将主字典列表中的值转为值为0的次级字典?
嘿,我来帮你一步步理清这个问题~
首先先拆解你的代码误区,再逐个解答你的疑问:
1. 列表中的值有没有被赋值为值为0的字典?
完全没有。你的循环写法有两个致命问题:
- 第一个
for listKey in primaryDict拿到的是字典的键(比如'list_a'这种字符串),而不是对应的列表。所以第二个循环for word in listKey其实是在遍历字符串的每个字符(比如'list_a'会被拆成'l'、'i'、's'等),根本没碰原列表里的'apple'、'orange'。 - 就算你生成了
{word:0}这样的字典,也没有把它存回原字典的列表里——你只是生成了字典,但没有赋值给任何变量,相当于做了无用功,原字典完全没被修改。
2. 错误出在循环还是打印语句的索引中,具体误区是什么?
两者都有问题:
- 循环的问题刚才已经说过了,没正确遍历列表元素,也没修改原字典。
- 打印语句的错误是:
primaryDict['list_a']对应的是一个列表,列表只能用整数索引(比如[0]取第一个元素),不能直接用字符串'apple'索引。就算你成功把列表改成了[{'apple':0}, {'orange':0}],正确的取法也应该是print(primaryDict['list_a'][0]['apple'])——先通过整数索引拿到列表里的字典,再用键取字典的值。
3. 当前方法无法达成目标,是否需要尝试其他方案?
当然需要,这里给你两种简单可行的方案:
方案一:用字典推导+列表推导一次性生成目标字典(推荐,简洁高效)
primaryDict = {'list_a':['apple', 'orange'], 'list_b':['car', 'bus']} # 遍历原字典的键和对应列表,对每个列表元素生成{item:0}的字典,组成新列表 target_dict = {key: [{item: 0} for item in lst] for key, lst in primaryDict.items()} print(target_dict) # 输出:{'list_a': [{'apple': 0}, {'orange': 0}], 'list_b': [{'car': 0}, {'bus': 0}]} # 正确取值的方式 print(target_dict['list_a'][0]['apple']) # 输出0
方案二:直接修改原字典(如果需要保留原字典的引用)
primaryDict = {'list_a':['apple', 'orange'], 'list_b':['car', 'bus']} for key, lst in primaryDict.items(): # 把原列表替换成由字典组成的新列表 primaryDict[key] = [{item: 0} for item in lst] print(primaryDict) # 同样得到目标结果 print(primaryDict['list_b'][1]['bus']) # 输出0
这两种方案都能准确实现你的需求,核心是要正确遍历原字典的键值对(用items()方法),然后对每个列表里的元素生成对应的字典,再把新列表赋值给对应的键。
内容的提问来源于stack exchange,提问作者qqc1037
相关产品推荐
相关产品推荐

