【问题标题】:How to shuffle and merge two dictionaries?如何洗牌和合并两个字典?
【发布时间】:2017-11-03 09:23:34
【问题描述】:

我有两个不同长度的字典。我想洗牌两个字典并合并它们。我被困在为相同的逻辑编写逻辑我需要一些算法方面的帮助。

第一个字典

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'
    }
}

我怎样才能得到最终的合并字典? 任何帮助将不胜感激。

【问题讨论】:

  • 字典在python中是无序的,所以我不确定你所说的洗牌是什么意思?
  • 为什么要在最终字典中以'ad_video1' : 'url2' 结尾?这对没有出现在b
  • 为什么输出在'key3' 子字典中有'ad_video1' : 'url1'
  • 从哪里获得 ad_video3 和 url3?
  • @PM2Ring 我需要它。这样理解,基本上我有 2 个视频列表,一个是基于健康的视频,另一个是广告视频列表,我想在每个视频之前播放广告,所有广告都应该分配给所有基于健康的视频。我找不到逻辑谢谢

标签: python dictionary logic


【解决方案1】:

这里有一些代码,我相信它可以满足您的需求。它通过对关键字符串进行排序来为字典强加一个顺序。我们可以使用cycle from itertools 循环遍历b 字典中的键。

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】:

    这行得通:

    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
    

    【讨论】:

    • 感谢它有效,但它不会将任何广告分配给 'a' dict 中的剩余值
    • 当广告视频不匹配时,您要分配哪些广告?总是 ad_video1?
    • 首先我不想匹配我只想分配随机广告视频的值。这样理解,基本上我有 2 个视频列表,一个是基于健康的视频,另一个是广告视频列表,我想在每个视频之前播放广告,所有广告都应该分配给所有基于健康的视频。谢谢
    • 所以你之前播放的广告视频总是随机的?
    • 是的,总是随机的。谢谢
    【解决方案3】:

    您可以使用以下步骤来合并两个字典 z = x.copy() z.update(y)

    【讨论】:

      猜你喜欢
      • 2013-04-17
      • 1970-01-01
      • 2021-08-23
      • 2018-10-23
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 2019-11-11
      相关资源
      最近更新 更多