Python 我如何在不同大小的字典的键匹配的地方将它们相乘?

Python 我如何在不同大小的字典的键匹配的地方将它们相乘?,python,dictionary,tuples,Python,Dictionary,Tuples,我需要将一个具有元组键的字典x与另一个字典y相乘。字典x大约有1000个条目,而y有12个条目。我想将两个字典的值相乘,y的键与x的键中元组的第二个元素相同 这些字典看起来像这样,我在这里缩短了这些字典,用于本例: x = {('a', 'a'): 1, ('a', 'b'): 0, ('a', 'c'): 3, ('a', 'd'): 2, ('b', 'a'): 3, ('b', 'b'): 2, ('b', 'c'): 2,

我需要将一个具有元组键的字典
x
与另一个字典
y
相乘。字典
x
大约有1000个条目,而
y
有12个条目。我想将两个字典的值相乘,
y
的键与
x
的键中元组的第二个元素相同

这些字典看起来像这样,我在这里缩短了这些字典,用于本例:

x = {('a', 'a'): 1,
     ('a', 'b'): 0,
     ('a', 'c'): 3,
     ('a', 'd'): 2,
     ('b', 'a'): 3,
     ('b', 'b'): 2,
     ('b', 'c'): 2,
     ('b', 'd'): 1}

y = {'a': 1,
     'b': 2,
     'c': 3}

# Expected output when the two are multiplied:

z = {('a', 'a'): 1,
     ('a', 'b'): 0,
     ('a', 'c'): 9,
     ('a', 'd'): 2,
     ('b', 'a'): 3,
     ('b', 'b'): 4,
     ('b', 'c'): 6,
     ('b', 'd'): 1}
我在这里看到了解决方案:但我的情况是在一个字典中有元组键,我不完全确定这会如何影响答案

应该这样做:

{k:y.get(k[1],1)*v代表k,v代表x.items()}

{('a','a'):1,
('a','b'):0,
('a','c'):9,
('a','d'):2,
('b','a'):3,
('b','b'):4,
('b','c'):6,
('b','d'):1}


编辑以反映词典名称的变化

这里有一个简单的方法来实现您的目标,无需使用
听写理解

dict1 = {('a', 'a'): 1,
 ('a', 'b'): 0,
 ('a', 'c'): 3,
 ('a', 'd'): 2,
 ('b', 'a'): 3,
 ('b', 'b'): 2,
 ('b', 'c'): 2,
 ('b', 'd'): 1}

dict2 = {'a': 1,
     'b': 2,
     'c': 3}

dict3 = {} # the result dictionary
for k, v in dict1.items():
    if k[1] in dict2: # it is the same as: if k[1] in dict2.keys()
        dict3[k] = v * dict2[k[1]]
    else:
        dict3[k] = v

print(dict3)
*输出:

{('a', 'a'): 1, ('a', 'b'): 0, ('a', 'c'): 9, ('a', 'd'): 2, ('b', 'a'): 3, ('b', 'b'): 4, ('b', 'c'): 6, ('b', 'd'): 1}

这不会影响答案。你需要稍微修改一下答案。不幸的是,你必须用元组键遍历字典。哦,我刚刚注意到你只有元组作为一个字典中的键,而不是两个。这个问题是关于在两个字典中都有相同的键。
a
是一个字典,你真的想把
(a,a)
本身作为一个键吗?只需要分享一些有效的代码,比如
('a','a')
你能用
b.get(k[1],1)
吗?请注意,写
k[1]更传统/惯用在dict2.keys()
as
k[1]中,在dict2
..@SamMason中,可能您没有阅读我的代码。再看一遍,你会注意到我在dict2.keys()中使用了
if k[1]:
。我不明白你的评论!尝试删除对
.keys()
的调用,您应该会得到相同的输出。@SamMason,我终于明白您的意思了。我更新并注释代码。没有问题!这是一个有用的快捷方式,我读过的大多数代码库都依赖它