【问题标题】:Python3: Adding two sets of dictionaries into new formatPython3:将两组字典添加到新格式中
【发布时间】:2014-10-16 01:23:42
【问题描述】:

我有两本词典,

MaleDict = {'Jason':[(2014, 394),(2013, 350)...], 
            'Stephanie':[(2014, 3), (2013, 21),..]....}
FemaleDict = {'Jason':[(2014, 56),(2013, 23)...], 
              'Stephanie':[(2014, 335), (2013, 217),..]....}

我正在尝试添加它们以便

CompleteDict = {'Jason':[(2014, 394, 56),(2013, 350, 23)...], 
                'Stephanie':[(2014, 3, 335), (2013, 21, 217),..]....}

我创建了一个列表理解,当每个字典都有那一年时完成任务。但是,即使 MaleDict 或 FemaleDict 中不存在年份,我也需要输出。例如,如果 MaleDict 中没有一年,则代码将显示为 ...'Stephanie':[....., (1999, 0, 389), ....]...

我的列表理解是

for name_key in name_keys:
    for year_key in year_keys:
        [BaseDict[name_key].append((year_key, a[1], b[1])) for a in MaleDict[name_key] for b in FemaleDict[name_key] if (year_key == a[0] == b[0])]

    #This is where I am stuck. My list comprehensions dont work when there is no value for a specific year
        [BaseDict[name_key].append((year_key, a[1], 0)) for a in MaleDict[name_key] for b in FemaleDict[name_key] if (year_key == a[0] != b[0])]
        [BaseDict[name_key].append((year_key, 0, b[1])) for a in MaleDict[name_key] for b in FemaleDict[name_key] if (year_key != a[0] == b[0])]
print(BaseDict)

【问题讨论】:

    标签: python-3.x dictionary list-comprehension


    【解决方案1】:

    如果您的数据格式不是一成不变的,我会考虑使用来自collectionsdefaultdict
    而不是[(2014, 394),(2013, 350)...]
    使用collections.defaultdict(int, {2014: 394, 2013: 350})
    然后你可以使用

    for name_key in name_keys:
        for year_key in year_keys:
            CompleteDict[name_key].update([FemaleDict[year_key], MaleDict[year_key]])
    

    CompleteDict['Stephanie'][1999] 将是 [0, 389]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2018-10-01
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多