如何反转其中一个值具有多个值/项目的字典?

问题描述 投票:0回答:1

我目前正在尝试找出如何反转字典,但由于某种原因,反转字典正在删除最后一个键:值对。该值中有 2 项,而不是 1 项,这是其他键:值对之间的唯一区别。使用我当前的代码,它会反转前 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 incontacts.items() if isinstance(value, str)} 方法,但这并没有反转所有值,仅反转前 3 个值。

python jupyter-notebook jupyter-lab
1个回答
0
投票

您必须调整反转逻辑以显式处理嵌套字典:

  1. 迭代原始字典中的每个键值对。
  2. 检查该值是否为字符串并反转。
  3. 如果该值是字典,则迭代它并将所有数字添加到倒排字典中。

以下是您可以如何实现它:

contacts_inv = {}
for key, value in contacts.items():
    if isinstance(value, str):
        if value in contacts_inv:
            contacts_inv[value].append(key)
        else:
            contacts_inv[value] = [key]
    elif isinstance(value, dict):
        for sub_key, sub_value in value.items():
            if sub_value in contacts_inv:
                contacts_inv[sub_value].append(key)
            else:
                contacts_inv[sub_value] = [key]
print(contacts_inv)
© www.soinside.com 2019 - 2024. All rights reserved.