代码之家  ›  专栏  ›  技术社区  ›  Saquib Sheikh

如何洗牌和合并两个字典?

  •  -2
  • Saquib Sheikh  · 技术社区  · 7 年前

    我有两本不同长度的字典。我想洗牌这两本词典并合并它们。我一直在为同样的问题编写逻辑,我需要一些算法方面的帮助。

    第一条

    a = { 
    'key1' : {'video1' : 'url1'}, 
    'key2' : {'video2' : 'url2'}, 
    'key3' : {'video3' : 'url3'}
    }
    

    第二条

    b = {'ad_video1' : 'url1', 'ad_video2' : 'url2'}
    

    期望输出为

    c = {
        'key1': {
            'video1' : 'url1',
            'ad_video1' : 'url1'
    
        }, 
        'key2': {
            'video2' : 'url2',
            'ad_video2' : 'url2'
        }, 
        'key3': {
            'video3' : 'url3',
            'ad_video1' : 'url1'
        }
    }
    

    我怎么才能拿到最后的合并词典? 任何帮助都将不胜感激。谢谢。

    3 回复  |  直到 7 年前
        1
  •  1
  •   PM 2Ring    7 年前

    这里有一些代码,我相信它能满足你的需要。它通过对键字符串进行排序来对字典进行排序。我们可以在 b dict使用 cycle from itertools .

    from itertools import chain, cycle
    from pprint import pprint
    
    a = { 
        'key1': {'video1' : 'url1'},
        'key2': {'video2' : 'url2'},
        'key3': {'video3' : 'url3'}
    }
    
    b = {'ad_video1': 'url1', 'ad_video2': 'url2'}
    
    c = {}
    for k1, k2 in zip(sorted(a.keys()), cycle(sorted(b.keys()))):
        c[k1] = a[k1].copy()
        c[k1][k2] = b[k2]
    
    pprint(c)
    

    输出

    {'key1': {'ad_video1': 'url1', 'video1': 'url1'},
     'key2': {'ad_video2': 'url2', 'video2': 'url2'},
     'key3': {'ad_video1': 'url1', 'video3': 'url3'}}
    
        2
  •  0
  •   MushroomMauLa    7 年前

    这项工作:

    dct = {}
    for key1,value1 in a.items():
        for key2,value2 in b.items():
            dct[key1] = value1
            if key2.endswith(key1[-1:]) and value2.endswith(key1[-1:]):
                dct.get(key1)[key2] = value2
    
        3
  •  0
  •   Python Learner    7 年前

    可以使用以下步骤合并两个词典 z=x.copy() z、 更新(y)