python,字典嵌套循环遍历合并问题

python;字典嵌套:像循环字典内字典的值,并根据内部字典相同的key,把values相加;可能说的有点模糊 ,直接上代码和图:
这是代码:

all_guests = {'Alice': {'apples': 5, 'pretzels': 12},
              'Bob': {'applse': 2, 'han sandwiches': 3},
              'Carol': {'cups': 3, 'apples pie': 1}}


def total_brought(guests,item):
    num_brought = 0
    for k, v in guests.items():
        num_brought = num_brought + v.get(item,0)
    return num_brought
print('带的东西数量:')

for k, v in all_guests.items():
    # print(k)
    # print(v)
    for k1, v1 in v.items():
        print(k1 + '----:' + str(total_brought(all_guests, k1)))

图片;

img

我希望结果是apples可以相互合并:aplles的数量为7,而不是打印两个apples
谢谢大家!!


new_dict = {}

all_guests = {'Alice': {'apples': 5, 'pretzels': 12},
              'Bob': {'applse': 2, 'han sandwiches': 3},
              'Carol': {'cups': 3, 'apples pie': 1}}

for item in all_guests.values():
    for k,v in item.items():
        #判断k在不在新的字典里面,如果在,就把现在的值和里面的值相加
        if k in new_dict.keys():
            v += new_dict.get(k)
        else:
            # 如果不在就直接赋值
            new_dict[k] = v


print('带的东西数量:')
for name,num in new_dict.items():
    print(f'{name}----:{num}')

没合并,是因为你有个单词拼写错了,applse

all_guests = {'Alice': {'apples': 5, 'pretzels': 12},
              'Bob': {'apples': 2, 'han sandwiches': 3},
              'Carol': {'cups': 3, 'apples pie': 1},
              '巴巴爸爸一家':{
                  '巴巴爸爸':{
                      'apples':3,
                      'banana':10
                      },
                  '巴巴妈妈':{
                      'cake':10,
                      '喜欢的东西':'巴巴妈妈'
                      },
                  '巴巴祖':{
                      'apples pie':5,
                      '喜欢的东西':'apples'
                      },
                  '巴巴利波':{
                      'book':5,
                      '喜欢的东西':['book','小明ヾ(。`Д´。)ノ彡 ']
                      }
                  }
              }


def getValues(d,n):
    if type(d) is dict:
        v = {}
        for i in d:
            r = getValues(d[i],i)
            for k in r:
                if k in v:
                    if type(r[k]) is int:
                        v[k] += r[k]
                    elif type(r[k]) is list:
                        v[k] += r[k]
                    else:
                        v[k].append(r[k])
                else:
                    if type(r[k]) is int:
                        v[k] = r[k]
                    elif type(r[k]) is list:
                        v[k] = r[k]
                    else:
                        v[k] = [r[k]]
        return v
    else:
        return {n:d}
        
items = getValues(all_guests,'')
for k in items:
    print(k,items[k])

img

什么情况,有两个评论被吃掉了?

可以用一个字典visit记录每个键出现的次数,然后加个判断:当前键出现次数为1时才输出结果。
(另外提一句,'applse': 2这个是不是写错了,应该是'apples': 2吧,不然结果就不会等于7哦)


all_guests = {'Alice': {'apples': 5, 'pretzels': 12},
              'Bob': {'apples': 2, 'han sandwiches': 3},
              'Carol': {'cups': 3, 'apples pie': 1}}


def total_brought(guests,item):
    num_brought = 0
    for k, v in guests.items():
        num_brought = num_brought + v.get(item,0)
    return num_brought
print('带的东西数量:')

visit={}    #记录每个键的出现次数
for k, v in all_guests.items():
    # print(k)
    # print(v)
    for k1, v1 in v.items():
        visit[k1]=visit.get(k1,0)+1;#统计每个键的出现次数
        if visit[k1]==1:    #键的出现次数为1时才输出
            print(k1 + '----:' + str(total_brought(all_guests, k1)))

运行结果:

img

单词居然拼错了。太尴尬了