python - 如何连接或组合具有重叠键的默认字典的两个默认字典?

标签 python python-2.7 dictionary key defaultdict

按照提供的建议进行工作 here ,并且有两个收入表可供提取(包含相同的水果但不同的品牌):

enter image description here

enter image description here

我以两个 defaultdictsdefaultdicts 结尾:

d1

defaultdict(<function <lambda> at 0x105dd42a8>, {u'Kiwi': defaultdict(<type 'int'>, {u'NZKiwi': 1.2}), u'Pear': defaultdict(<type 'int'>, {u'PearShaped': 6.2}), u'Banana': defaultdict(<type 'int'>, {u'BananaBrand': 4.0, u'OtherBrand': 3.2}), u'Apple': defaultdict(<type 'int'>, {u'CrunchApple': 1.7})})

d2

defaultdict(<function <lambda> at 0x105dd41b8>, {u'Kiwi': defaultdict(<type 'int'>, {u'n': 1.2}), u'Pear': defaultdict(<type 'int'>, {u'p': 6.2}), u'Banana': defaultdict(<type 'int'>, {u'b': 4.0, u'o': 3.2}), u'Apple': defaultdict(<type 'int'>, {u'a': 1.7})})

出于论证的目的,假设我无法在上述处理之前组合两个表,那么我现在如何组合这些默认字典,以便维护键(水果类型),但每个键各自的值被连接?换句话说,我如何最终得到以下结果:

defaultdict(<function <lambda> at 0x105dd41b8>, {u'Kiwi': defaultdict(<type 'int'>, {u'n': 1.2, u'NZKiwi': 1.2}), u'Pear': defaultdict(<type 'int'>, {u'p': 6.2, u'PearShaped': 6.2}), u'Banana': defaultdict(<type 'int'>, {u'b': 4.0, u'o': 3.2, u'BananaBrand': 4.0, u'OtherBrand': 3.2}}), u'Apple': defaultdict(<type 'int'>, {u'a': 1.7, u'CrunchApple': 1.7})})

实际上,它不一定必须采用这种结构 - 我真正需要的是可以从中提取每个产品的各个品牌数量对的东西。因此,结果是 Banana 的一个字典,包含其 4 个品牌数量对,Kiwi 的另一个字典,包含其两个品牌数量对,等等。

更新:我可以执行以下操作,但肯定有更干净的方法?

BananaDict = {}
KiwiDict ={}
AppleDict = {}
PearDict = {}

for k, v in d1.iteritems():
    if k == 'Banana':
        BananaDict.update(v)
    elif k == 'Kiwi'
    etc.
    etc.

然后对 d2 重复上述操作。

最佳答案

我注意到另一个答案没有考虑到新词典具有原始词典没有的 key 的情况。

def merge_defaultdicts(d,d1):
    for k,v in d1.items():
        if (k in d):
            d[k].update(d1[k])
        else:
            d[k] = d1[k]
    return d

关于python - 如何连接或组合具有重叠键的默认字典的两个默认字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31216001/

相关文章:

Python 时间 : How to initialize arguments for timed function before every repetition?

python - 如何在 python 中获取打开文件的 win32 句柄?

python - 使用 pip 和 virtualenv 在 Windows 上安装 psycopg2 时出错

python - 使用python将视频上传到youtube?

python - 使用 python 处理从 semrush 到 JSON 的 CSV 响应

python - 使用 Python 在 Google 中搜索

Java HashMap 具有重复键的疯狂行为

python - 我怎样才能找到字典中值之间的所有差异?

jquery - 传单 map 无法正确加载

python - 如何选择 groupby 中空值最少的组?