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

如何反转含多值元素的Python字典?解决反转丢键值对问题

问题:反转Python字典时丢失嵌套字典对应的键值对

我尝试反转一个Python字典,但反转后的字典丢失了最后一组键值对。该键对应的值是包含两个元素的嵌套字典,这是它与其他键值对的唯一区别。当前代码仅反转了前3个姓名与号码的键值对,最后一个完全未出现在反转结果中。请问如何反转字典中的全部四个值?

contacts = {
    "John A": "858 900 1001", 
    "Jillian": "858 900 1002", 
    "Ron": "858 900 1003", 
    "Miranda": { "mobile": "858 900 1004", "home": "555 1284" }
}
sorted(contacts.keys())
for key in contacts:
    value = contacts[key]
    if key == "Miranda" and 'mobile' in value:
        print(f"contact: {key}, mobile number: {value['mobile']}")
    else:
        print(f"contact: {key}, mobile number: {value}")
contacts_inv = {value: key for key, value in contacts.items() if isinstance(value, str)}
print(contacts_inv)

我尝试使用标准的字典推导式反转方法{v: k for k, v in contacts.items() if isinstance(value, str)},但该方法仅反转了前3个值,无法覆盖全部内容。


问题原因

你的字典推导式里添加了if isinstance(value, str)的过滤条件,这会直接排除所有值不是字符串的项。Miranda对应的值是嵌套字典,不满足该条件,所以被过滤掉了。

解决方案

方案1:将嵌套字典中的每个号码单独反转

如果希望把Miranda的两个号码都作为反转字典的键,对应值为她的名字,可以用循环逐个处理:

contacts_inv = {}
for name, info in contacts.items():
    if isinstance(info, str):
        # 普通字符串号码直接反转
        contacts_inv[info] = name
    else:
        # 遍历嵌套字典中的所有号码,逐个添加到反转字典
        for number in info.values():
            contacts_inv[number] = name

print(contacts_inv)

运行结果:

{
    '858 900 1001': 'John A',
    '858 900 1002': 'Jillian',
    '858 900 1003': 'Ron',
    '858 900 1004': 'Miranda',
    '555 1284': 'Miranda'
}

方案2:将嵌套字典转换为可哈希类型作为键

如果需要把整个嵌套字典作为反转后的键,由于字典本身不可哈希(不能作为字典的键),需要先将其转换为可哈希的类型,比如排序后的键值对元组:

contacts_inv = {}
for name, info in contacts.items():
    if isinstance(info, str):
        contacts_inv[info] = name
    else:
        # 将嵌套字典转为排序后的键值对元组,保证哈希唯一性
        hashable_info = tuple(sorted(info.items()))
        contacts_inv[hashable_info] = name

print(contacts_inv)

运行结果:

{
    '858 900 1001': 'John A',
    '858 900 1002': 'Jillian',
    '858 900 1003': 'Ron',
    (('home', '555 1284'), ('mobile', '858 900 1004')): 'Miranda'
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:45:57