合并两个具有相同键值的字典

时间:2019-03-13 07:12:51

标签: python python-3.x dictionary merge

我有两个包含相同键的字典

#######################
Cruise <- unique(TNumStat$Cruiseid)
Track <- unique(TNumStat$Samplenr)
#######################
AvrLengthCr <- c()
AvrLengthCr <- rep(NA, length(TNumStat$Species))
#######################
for(j in 1:length(Cruise)){
  t1.ss <- which(TNumStat$Cruiseid ==  Cruise[j])
  ###
  for(i in 1:length(Track)){
    t2.ss <- which(TNumStat$Samplenr[t1.ss] ==  Track[i])
    ###
    AvrLengthCr[t1.ss][t2.ss] <- ((TNumStat$TNumLK[t1.ss][t2.ss]/TNumStat$TNumStat[t1.ss][t2.ss])*0.5+0.25)*10
  }}

当我合并它们时,由于名称相同,字典b的键替换了a的键。这是我正在使用的合并代码

TNumStat2<-dcast(TNumStat,Cruiseid+Samplenr+Species+Age,formula = (((TNumStat$TNumLK/TNumStat$TNumStat*0.5+0.25)*10) )),na.rm=TRUE)

有什么办法可以保留所有键,我知道字典不能具有相同的键名,但是我可以使用类似的东西:

a = {'a':[3,2,5],
     'b':[9,8],
     'c':[1,6]}

b = {'b':[7,4],
     'c':[10,11]}

3 个答案:

答案 0 :(得分:2)

您可以在方法update()中使用生成器表达式:

a.update((k + '_1' if k in a else k, v) for k, v in b.items())
# {'a': [3, 2, 5], 'b': [9, 8], 'c': [1, 6], 'b_1': [7, 4], 'c_1': [10, 11]}

答案 1 :(得分:1)

虽然我认为Usman的答案可能是“正确”的解决方案,但从技术上讲,您是这样要求的:

for key, value in b.items():
  if key in a:
    a[key + "_1"] = value
  else:
    a[key] = value

答案 2 :(得分:1)

也许做这样的事情:

a = {'a':[3,2,5],
     'b':[9,8],
     'c':[1,6]}

b = {'b':[7,4],
     'c':[10,11]}

z = {}

for key in a:
    if key in b:
        z[key + "_1"] = b[key]
        z[key] = a[key]
    else:
        z[key] = a[key]


print(z)                            

输出:

{'a': [3, 2, 5], 'b_1': [7, 4], 'b': [9, 8], 'c_1': [10, 11], 'c': [1, 6]}