第5章-11 字典合并 (40 分)

致读者:本人是一名通信专业学生,仅学了4天Python ,难免有些地方写的很笨拙。
写博客一方面是为了记录自己的学习过程中遇到的问题和思考,一方面是希望能够帮助到很多和自己一样处于困惑的读者。
水平有限,博客中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!
越努力,越幸运

输入用字符串表示两个字典,输出合并后的字典。字典的键用一个字母或数字表示。注意:1和‘1’是不同的关键字!

输入格式:

在第一行中输入第一个字典字符串;

在第二行中输入第二个字典字符串。

输出格式:

在一行中输出合并的字典,输出按字典序。

“1” 的 ASCII 码为 49,大于 1,排序时 1 在前,“1” 在后。其它的字符同理。

输入样例1:

在这里给出一组输入。例如:

{1:3,2:5}
{1:5,3:7}

输出样例1:

在这里给出相应的输出。例如:

{1:8,2:5,3:7}

输入样例2:

在这里给出一组输入。例如:

{“1”:3,1:4}
{“a”:5,“1”:6}

输出样例2:

在这里给出相应的输出。例如:

{1:4,“1”:9,“a”:5}

知识点:字典合并(注意key值相同的问题),字典排序(字符串和整形均存在)

1、使用Count合并,zip和sorted排序(字符串,整形各一个字典)

# Count合并例程
a = {"1": 3, 1: 4}
b = {"a": 5, "1": 6}
x = dict(Counter(a)+Counter(b))
from collections import Counter

l = []
for _ in range(2):
    l.append(eval(input()))

# 把两个字典中相同的加在一起
m, n = Counter(l[0]), Counter(l[1])
x = dict(m + n)

# m字典存放int类型key,n字典存放字符类型。
m, n = dict(), dict()
for j in x.keys():
    if isinstance(j, str):
        n[j] = x[j]
    else:
        m[j] = x[j]

m = dict(sorted(zip(m.keys(), m.values())))
m.update(dict(sorted(zip(n.keys(), n.values()))))
s = str(m)
s = s.replace(' ', '')
s = s.replace("'", '"')
print(s)

2、for和字典get进行合并,zip和sorted排序(字符串,整形各一个字典)

# for和字典get例程
a = {"1": 3, 1: 4}
b = {"a": 5, "1": 6}
c ={}
for i in a:
    c[i]=a[i]+b.get(i,0)
for i in b:
    if i not in c.keys():
        c[i] = b[i]
print(c)
l = []
for _ in range(2):
    l.append(eval(input()))
    
# m字典存放int类型key,n字典存放字符类型。
m, n = dict(), dict()
for i in l:
    for j in i.keys():
        if isinstance(j, str):
            n[j] = n.get(j, 0) + i[j]
        else:
            m[j] = m.get(j, 0)+i[j]

m = dict(sorted(zip(m.keys(), m.values())))
m.update(dict(sorted(zip(n.keys(), n.values()))))
s = str(m)
s = s.replace(' ', '')
s = s.replace("'", '"')
print(s)

3、for和字典get进行合并,lambda 和sorted排序(一个字典)

d1=eval(input())
d2=eval(input())
d3={}
for i in d1:
    d3[i]=d1[i]+d2.get(i,0)
for i in d2:
    if i not in d3.keys():
        d3[i]=d2[i]
d3=str(dict(sorted(d3.items(),key=lambda x:x[0] if type(x[0])==int else ord(x[0]))))
d3=d3.replace(' ','')
d3=d3.replace("'",'"')
print(d3)

4、使用Count合并,lambda 和sorted排序(一个字典)

from collections import Counter
d1, d2 = eval(input()), eval(input())
d3 = dict(Counter(d1) + Counter(d2))
d3 = str(dict(sorted(d3.items(), key=lambda x: x[0] if type(x[0]) == int else ord(x[0]))))
d3 = d3.replace(' ', '')
d3 = d3.replace("'", '"')
print(d3)

5、压缩版 4行

from collections import Counter
d1, d2 = eval(input()), eval(input())
d3 = str(dict(sorted(dict(Counter(d1) + Counter(d2)).items(), key=lambda x: x[0] if type(x[0]) == int else ord(x[0]))))
print(d3.replace(' ', '').replace("'", '"'))

6、无限套娃版:2行(实际不可能那么伞兵)

from collections import Counter
print(str(dict(sorted(dict(Counter(eval(input())) + Counter(eval(input()))).items(), key=lambda x: x[0] if type(x[0]) == int else ord(x[0])))).replace(' ', '').replace("'", '"'))
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值