【问题标题】:Merge dicts use dict1 values with dict2 values合并 dicts 使用 dict1 值和 dict2 值
【发布时间】:2017-07-30 07:31:46
【问题描述】:

我有两个这样的字典:

a = {'SITE1': [700], 'SITE2': [500]}
b = {'SITE1': [1,2,3,4], 'SITE2': [4,5,6,7], 'SITE3': [8,9,10,11]}

我正在寻找这个结果:

c = {'SITE1': [1/700, 2/700, 3/700, 4/700],
     'SITE2': [4/500, 5/500, 6/500, 7/500]}
     'SITE3': [0, 0, 0, 0]}

如果在“a”字典中找不到字典“b”站点,则该站点的值应在结果中替换为零。

您能帮帮我吗?非常感谢。

【问题讨论】:

  • 1/700 是什么意思?一个字符串,1除以700?
  • 所有元素都是数字。

标签: python dictionary join merge


【解决方案1】:
c = { k : [ val_b / a[k][0] for val_b in b[k] ] for k in a }

请注意,我假设1/700 是指除法的实际结果。 我还假设两个字典总是具有完全相同的键。

编辑:刚刚注意到在您的示例中,第一个 dict 还将值存储在一个元素列表中

【讨论】:

  • for val-b in??
  • 抱歉,打错了
  • 你的测试怎么没发现那个错字?
  • WillemVanOnsem 查看我所做的编辑。 @StefanPochmann 重新输入代码,而不是从控制台窗口复制粘贴。
【解决方案2】:

也许可以 - 假设您希望 c 的值作为浮点列表并假设 a 的值始终是单元素列表...:

a = {'SITE1': [700], 'SITE2': [500]}
b = {'SITE1': [1,2,3,4], 'SITE2': [4,5,6,7], 'SITE3': [8,9,10,11]}

c = dict()
for key in b:
    if key in a:
        c[key] = [float(v)/(a[key][0]) for v in b[key]]
    else:
        c[key] = [0 for v in b[key]]

【讨论】:

  • 是的,'a' dict 和 'b' dict 中 Site 的值的数量总是相同的。一个用于“a”站点,四个用于“b”站点。但是两个字典中的站点数量可能不同。
  • 好的,那么额外的网站应该怎么办?如果它们不在两个字典中,请忽略它们?
  • 额外的站点在哪里?只在 b 中,还是在 a 中?
  • 额外的站点总是在b dict中
  • 非常感谢 noamgot!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 2019-01-22
  • 1970-01-01
  • 2020-02-12
  • 2018-10-30
相关资源
最近更新 更多