用另一个字典的值替换字典的键以创建新字典

问题描述 投票:2回答:2

我试图用ages字典的值(名称)替换d1字典中的键(如下所示)。

我希望最后的字典看起来像:[Callum: 20, Herrara, 21 etc]而不是只有我目前得到的最后一个值[Liz: 19]

这是我的代码

d1 = {
0 : "Callum",
1: "Herrera",
2: "Bob",
3: "Bill",
4: "Liz",}

ages= {
0: 20,
1: 21,
2: 40,
3: 20,
4: 19,}

for v in d1.values():
    A=v

for v in ages.values():
    B= v

dictionary3= {
    A:B,
}

print (dictionary3)
python dictionary
2个回答
2
投票

您的尝试在每次迭代时重写数据。另外,他们只通过迭代值就失去了名称和索引之间的关系。是时候从头开始重新思考这种方法了。

我将结合使用dict数据并使用字典理解构建一个新的字典:

result = {name:ages[index] for index,name in d1.items()}

>>> result
{'Bill': 20, 'Bob': 40, 'Callum': 20, 'Herrera': 21, 'Liz': 19}

请注意,d1就像tuples列表一样使用。只有ages像真正的字典一样使用。您可以插入默认年龄以避免出现如下错误:

result = {name:ages.get(index,"unknown") for index,name in d1.items()}

所以索引缺失的人得到"unknown"年龄。


1
投票

您可以简单地遍历名称并执行以下操作:

names = {
    0: "Callum",
    1: "Herrera",
    2: "Bob",
    3: "Bill",
    4: "Liz"
}

ages = {
    0: 20,
    1: 21,
    2: 40,
    3: 20,
    4: 19
}

name_age = {}
for key, value in names.items():
    name_age[value] = ages.get(key, -1)

>>> print(name_age)
{'Callum': 20, 'Bill': 20, 'Bob': 40, 'Liz': 19, 'Herrera': 21}

虽然你使用dict作为list似乎很奇怪;如果你想使用list来模仿这种行为,你可以使用enumerate()这样做,这将相应地产生索引。

理想的情况是使用如下所示的适当数据结构;但它完全取决于您的要求。

name_age = [
    {
        "name": "Callum",
        "age": 20
    },
    {
        "name": "Herrera",
        "age": 21
    }
]
© www.soinside.com 2019 - 2024. All rights reserved.