2 OrderedDictionarys将两个值相乘,即多个键

时间:2016-01-07 23:35:58

标签: python dictionary

我有两个OrderedDicts:

ulimit -n 64000

假设A = OrderedDict([(('a', 'b'), 4) ... ]) B = OrderedDict([('b', 2) ... ]) 中的'b'A中的密钥相同,将两个值相乘的最佳方法是什么?

我正在努力解决B中有两个键的问题。

预期产出:

A

为了清楚起见,我正在寻找C = ([('a', 'b') 8) ... ]) 中的密钥与元组B密钥的后半部分之间的匹配。如果它们彼此相等,那么我想在它们各自的元素中乘以两个A

这是我的(虚弱的)尝试:

.values()

我不太确定如何将此传递给for a in A.keys(): print a for b, c in A.keys(): print c # this prints the second tuple in A 并将匹配的B.keys()多个

2 个答案:

答案 0 :(得分:1)

以下是3种方法。这些做你想做的吗?他们导致一个字典虽然不是一个有序的字典。您可以将字典传递给OrderedDict,但订单不会很明确。

from collections import OrderedDict

A = OrderedDict({('a','b'): 4, ('b','a'): 5, ('b','c'): 2, ('a','c'): 6})
B = OrderedDict({'b': 2, 'c' : 5})

''' Method 1 quadratic '''
C = {}
for bk, bv in B.items():
    for ak, av in A.items():
        if bk == ak[1]:
            C[ak] = bv * av

print(C)

''' Method 2 linear '''
D = {}
for ak, av in A.items():
    if ak[1] in B:
        D[ak] = av * B[ak[1]]

print(D)

''' Method 3 linear one-liner '''
E = {ak: av * B[ak[1]] for ak, av in A.items() if ak[1] in B}

print(E)

答案 1 :(得分:0)

>>> A = {('a', 'b'): 4}
>>> B = {'b': 2}

>>> C = {key: (value * B[key[1]])
...      for key, value in A.items()}

>>> C
{('a', 'b'): 8}