求助:将列表转换为含所有键值对的Python完整字典
列表转字典仅保留最后一组键值对的解决方法
你的代码存在两个关键问题:
- 每次循环都重新创建新字典,而非向同一个字典中添加键值对,导致之前的内容被不断覆盖,最终只剩最后一组数据。
- Python中获取列表长度的正确函数是
len(),不是length(),原代码会触发语法错误。
下面是几种可行的修正方案:
方案一:初始化空字典,循环添加键值对
这是最直观的写法,适合新手理解:
values_list = ['apple', 87, 'fan', 88, 'jackal', 89, 'bat', 98, 'car', 84, 'ice', 80, 'car', 86, 'apple', 82, 'goat', 80, 'dog', 81, 'cat', 80, 'eagle', 90, 'eagle', 98, 'hawk', 89, 'dog', 79, 'fan', 89, 'goat', 85, 'car', 81, 'hawk', 90, 'ice', 85, 'cat', 78, 'goat', 84, 'jackal', 90, 'apple', 80, 'ice', 87, 'bat', 94, 'bat', 92, 'jackal', 91, 'eagle', 93, 'fan', 85] # 先创建一个空字典 values_count_dict = {} # 以步长2遍历列表,每次取键和对应的值 for i in range(0, len(values_list), 2): values_count_dict[values_list[i]] = values_list[i+1] print(values_count_dict)
注意:字典的键具有唯一性,若原列表中存在重复键(比如多次出现的apple、car),后面的数值会覆盖前面的。
方案二:使用字典推导式(简洁写法)
一行代码完成转换,适合熟悉Python语法的用户:
values_list = ['apple', 87, 'fan', 88, 'jackal', 89, 'bat', 98, 'car', 84, 'ice', 80, 'car', 86, 'apple', 82, 'goat', 80, 'dog', 81, 'cat', 80, 'eagle', 90, 'eagle', 98, 'hawk', 89, 'dog', 79, 'fan', 89, 'goat', 85, 'car', 81, 'hawk', 90, 'ice', 85, 'cat', 78, 'goat', 84, 'jackal', 90, 'apple', 80, 'ice', 87, 'bat', 94, 'bat', 92, 'jackal', 91, 'eagle', 93, 'fan', 85] values_count_dict = {values_list[i]: values_list[i+1] for i in range(0, len(values_list), 2)} print(values_count_dict)
方案三:用zip函数分组转换(可读性最高)
通过切片把原列表拆成键列表和值列表,再用zip配对后转字典:
values_list = ['apple', 87, 'fan', 88, 'jackal', 89, 'bat', 98, 'car', 84, 'ice', 80, 'car', 86, 'apple', 82, 'goat', 80, 'dog', 81, 'cat', 80, 'eagle', 90, 'eagle', 98, 'hawk', 89, 'dog', 79, 'fan', 89, 'goat', 85, 'car', 81, 'hawk', 90, 'ice', 85, 'cat', 78, 'goat', 84, 'jackal', 90, 'apple', 80, 'ice', 87, 'bat', 94, 'bat', 92, 'jackal', 91, 'eagle', 93, 'fan', 85] # 切片取偶数位元素作为键,奇数位作为值 keys = values_list[::2] values = values_list[1::2] values_count_dict = dict(zip(keys, values)) print(values_count_dict)
内容的提问来源于stack exchange,提问作者Retsi
相关产品推荐
相关产品推荐

