将字典值与不同的键相乘

时间:2017-10-03 17:28:01

标签: python python-3.x dictionary dictionary-comprehension

两个词典的值乘以相同键的问题,我决定如下:

v1={'name1': '10', 'name2': '20'}
v2={'name1': '4', 'name2': '5'}

foo = lambda dct_1, dct_2: {key: int(dct_2[key]) * int(dct_1[key]) for key in dct_2}

foo(v1, v2)
# Out: {'name1': 40, 'name2': 100}

如何以相同的方式乘以两个词典的值,但使用不同的键?

v1={'name1': '10', 'name2': '20'}
v2={'quantity1': '4', 'quantity2': '5'}

#OUT: {'name1':'40', 'name2': '100'}

4 个答案:

答案 0 :(得分:2)

假设您总是有相应的nameXquantityX值,您可以在键上使用简单替换:

foo = lambda dct_1, dct_2: {key: int(dct_2[key.replace('name', 'quantity')]) * int(dct_1[key]) for key in dct_1}

答案 1 :(得分:1)

multiplydicts = lambda x,y: { key: str(int(v1[key]) * int(val)) for key,val in zip(v1.keys(), v2.values())}

假设您的词典大小相同,这应该可以解决问题,而v2.values()将按照构造的顺序返回v2的值。

答案 2 :(得分:1)

你可以这样做:

Species

答案 3 :(得分:1)

您只需添加一些内容即可将第一个字典中的键映射到第二个字典中的键。最简单的方法是在下面的代码中使用名为keymap的第三个字典。第一个字典中的键确定将在返回的字典中出现的键。

这是必需的,因为普通字典中的键的顺序是未定义的,因此您不能依赖或预测迭代它们时它们将出现的顺序。

v1={'name1': '10', 'name2': '20'}
v2={'quantity1': '4', 'quantity2': '5'}
keymap = {'name1': 'quantity1', 'name2': 'quantity2'}  # Added.

foo = (lambda dct_1, dct_2:
        {key: int(dct_2[keymap[key]]) * int(dct_1[key]) for key in dct_1})

print(foo(v1, v2))  # -> {'name1': 40, 'name2': 100}