You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 2.7列表转字典时丢失一组键值对,原因是什么?

问题分析与解决方案

嘿,我帮你揪出问题所在了!你遇到的键值对丢失,核心原因是字典的键具有唯一性——你的源列表里有重复的键'Social security and child support:',当你直接用dict(zip(k, v))转换时,后面的键值对会直接覆盖前面的同名键,导致第一组邮箱的键值对被丢失。

先拆解下你的源数据:

  • 你提取的键列表k是:['Social security and child support:', 'Enquiries:', 'Social security and child support:', 'Social security and child support fax:']
  • 对应的值列表v是:['sscsa-glasgow@justice.gov.uk', 'enquiries-cicap@hmcts.gsi.gov.uk', '0300 790 6234', '01264 347 981']

这里第二个'Social security and child support:'会覆盖第一个,所以最终字典里这个键只会保留最后对应的电话值,邮箱那组就没了。另外提一句:你原代码里的for i in le_list循环完全是多余的——每次循环都重复生成k和v,根本没用到循环变量i,直接一次处理就行。

解决方案

根据你的需求,分两种情况处理:

1. 保留所有同名键的对应值(推荐)

如果想把同一个键的多个值都存起来,可以用collections.defaultdict来生成值为列表的字典:

from collections import defaultdict

le_list = ['Social security and child support:', 'sscsa-glasgow@justice.gov.uk', 'Enquiries:', 'enquiries-cicap@hmcts.gsi.gov.uk', 'Social security and child support:', '0300 790 6234', 'Social security and child support fax:', '01264 347 981']

# 初始化一个值为列表的字典
le_dict = defaultdict(list)
# 成对遍历键和值,逐个添加
for key, value in zip(le_list[0::2], le_list[1::2]):
    le_dict[key].append(value)

# 可选:转成普通字典格式
le_dict = dict(le_dict)
print(le_dict)

输出结果会保留所有数据:

{
    'Social security and child support:': ['sscsa-glasgow@justice.gov.uk', '0300 790 6234'],
    'Enquiries:': ['enquiries-cicap@hmcts.gsi.gov.uk'],
    'Social security and child support fax:': ['01264 347 981']
}

2. 给重复键重命名(如果需要单个值对应单个键)

如果你希望每个键都是唯一的,可以手动给重复键加后缀(比如序号),示例代码:

le_list = ['Social security and child support:', 'sscsa-glasgow@justice.gov.uk', 'Enquiries:', 'enquiries-cicap@hmcts.gsi.gov.uk', 'Social security and child support:', '0300 790 6234', 'Social security and child support fax:', '01264 347 981']

le_dict = {}
key_count = {}

for key, value in zip(le_list[0::2], le_list[1::2]):
    if key in key_count:
        key_count[key] += 1
        # 给重复键加序号后缀
        new_key = f"{key} ({key_count[key]})"
        le_dict[new_key] = value
    else:
        key_count[key] = 1
        le_dict[key] = value

print(le_dict)

输出结果会把重复键区分开:

{
    'Social security and child support:': 'sscsa-glasgow@justice.gov.uk',
    'Enquiries:': 'enquiries-cicap@hmcts.gsi.gov.uk',
    'Social security and child support: (2)': '0300 790 6234',
    'Social security and child support fax:': '01264 347 981'
}

内容的提问来源于stack exchange,提问作者ron_g

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:29:30