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

时间:2019-03-03 12:07:47

标签: python dictionary

我正在尝试将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)

2 个答案:

答案 0 :(得分:2)

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

我会结合字典数据和字典理解来构建新字典:

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 :(得分: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
    }
]