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)))
图片;
我希望结果是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])
什么情况,有两个评论被吃掉了?
可以用一个字典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)))
运行结果:
单词居然拼错了。太尴尬了