牛客网HJ8 合并表记录Python3解法

本文详细介绍了如何在Python3中合并字典记录,包括使用dic[key] = value、update()方法添加字典元素,判断键是否存在,以及字典排序技巧,如使用sorted()函数。此外,还讲解了sort()与sorted()的区别,map()函数的用法,以及列表末尾追加元素的append()和extend()方法。解题关键在于注意输出要求对键进行升序排列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 题目:

 解题方法:

n = int(input())
dic = {}
# 接收输入的n组键值对
for i in range(n):
    key, value = map(int, input().split(' '))
    # 判断字典里是否已有新接收输入的key,没有则加到字典里,有则将这个key对应的value值叠加
    if key not in dic:
        dic[key] = value
    else:
        dic[key] += value
# 将结果按照key值进行排序
li = sorted(dic.items())
for i in range(len(li)):
    print('{} {}'.format(li[i][0], li[i][1]))

涉及到的一些方法:

字典添加元素:

①使用dic[key] = value,就表示字典中新增了一个键值对key: value;

②使用update()方法,如a = {'aaa': 'bbb'},dic.update(a)即可将其追加到字典末尾。

判断字典中某个键是否存在:

dic = {'Name': 'Zara', 'Age': 7}
if a in dic:
    ...
# keys()函数返回字典内所有键
if a in dic.keys():
    ...

if b not in dic:
    ...
if b not in dic.keys():
    ...

字典的排序:

dict.items():items()方法返回包含(键、值)的元组,如:

dict = {'one': 1, 'two': 2, 'three': 3}
for key, value in dict.items():
    print(key, value)

# 输出:one 1
#      two 2
#      three 3

for i in dict.items():
    print(i)

# 输出:('one', 1)
#      ('two', 2)
#      ('three', 3)

sorted()函数:sorted(iterable, cmp, key,reverse= False) ;

第一个参数iterable,可迭代对象,如列表、字典等;

第二个参数cmp,比较的函数,这里具有两个参数,从可迭代对象中取出参数,大于返回1,小于返回-1,等于返回0;

第三个参数key,比较的元素,指定可迭代对象中用于排序的元素;

第四个参数reverse,排序规则,True表示降序,False表示升序(默认)。

sorted()方法返回的是列表和元组。

a = [5,7,6,3,4,1,2]
b = sorted(a)       # 保留原列表
print(a) 
# 输出:[5, 7, 6, 3, 4, 1, 2]
print(b)
# 输出:[1, 2, 3, 4, 5, 6, 7]
 
L=[('b',2),('a',1),('c',3),('d',4)]
m = sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))   # 利用cmp函数
print(m)
# 输出:[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

n = sorted(L, key=lambda x:x[1])               # 利用key
print(n)
# 输出:[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
 
 
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
ss = sorted(students, key=lambda s: s[2])            # 按年龄排序
print(ss)
# 输出:[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
 
rs = sorted(students, key=lambda s: s[2], reverse=True)       # 按降序
print(rs)
# 输出:[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

sort()和sorted()的区别:

①sort()只能对列表进行操作,而sorted()可以对所有可迭代的对象进行操作;

②sort()返回的是对原有列表的处理操作,无返回值;

而内建函数sorted()会在返回一个新的列表,而不是在原来的基础上进行操作。

map()函数:python的内置函数,map(f,seq) 接收一个函数f和一个seq列表,然后用函数f对列表里的每一个元素进行处理,得到一个新的list返回。例如:

def f(x):
    return x*x

li = list(map(f, [1, 2, 3, 4, 5]))
# map(f, [1, 2, 3, 4, 5])返回的是一个map对象,所以要转换成列表
print(li)

# 输出:[1, 4, 9, 16, 25]

map()还可以用来接收多个输入值,例如:

a, b, c = map(int, input().split(' '))
# 接收多个整数值

a, b, c = map(str, input().split(' '))
# 接收多个字符

a, b, c = map(float, input().split(' '))
# 接收多个浮点型值

......


# 或者接收一个列表
l = [int(i) for i in map(int, input().split(' '))]
print(l)

# 输入: 1 2 4
# 输出:[1, 2, 4]

关于map的用法,可参考这篇文章:python-map的用法 - lincappu - 博客园

列表末尾追加元素:

list.append(n)方法,n可以是单个元素、一个元组、一个列表,追加进去的是整个元组、列表的元素;

list.extend(n)方法,n可以是单个元素、一个元组、一个列表,追加进去的是元组、列表里的各个元素。

l = ['Python', 'C++', 'Java']
B = ('JS', 'C')
C = ['aaa', 'bbb']
# 追加元素
l.append(B)
l.append(C)
print(l)
# 输出:['Python', 'C++', 'Java', ('JS', 'C'), ['aaa', 'bbb']]

​
l = ['Python', 'C++', 'Java']
B = ('JS', 'C')
C = ['aaa', 'bbb']
# 追加元素
l.extend(B)
l.extend(C)
print(l)
# 输出:['Python', 'C++', 'Java', 'JS', 'C', 'aaa', 'bbb']

总结:解这道题的时候提交答案好几次都没过,一直想不通,后来发现输出结果要求要对输入的键值对按key升序排列。。。所以说,审题很重要!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值