我正在尝试将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)
答案 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
}
]