HJ8 合并表记录

数据表记录包含表索引index和数值value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出。

提示:

0 <= index <= 11111111

1 <= value <= 100000

输入描述:

先输入键值对的个数n(1 <= n <= 500)
接下来n行每行输入成对的index和value值,以空格隔开

输出描述:

输出合并后的键值对(多行)

示例1

输入:

4
0 1
0 2
1 2
3 4

输出:

0 3
1 2
3 4

import sys
n=int(input())
lis=[]
dic={}
for i in range(n):
    li=input().split(" ") 
    lis.append(li)
for k,v in lis:
    if k in dic:
        dic[k] = int(dic[k]) + int(v)
    else:
        dic[k] = v
dict1 = sorted(dic.items(), key=lambda x : int(x[0]))
for key,value in dict1:
    print(key,value)
     

字典生成方式:拥有一个二维数组。字典(Dictionary)是Python中非常常用的数据结构之一,它是由一系列键(key)和对应的值 (value)组成的。在Python中,字典是一种可变的、无序的集合,可以通过键来访问和修改对应的值。

字典追加元素:

方法一:方括号[]法

dic1['key'] = 值,即可用于修改字典中的键值对,又可用于新增字典中的键值对。

当键存在时,为修改。

当键不存在时,为新增。

方法二:dic1.update(dic2)

dic1.update(dic2)既可用于修改字典中的键值对,又可用于新增字典中的键值对。

当dic2中有键与dic1中键冲突时,会修改dic1中的键所对应的值,即用dic2中冲突键的值去覆盖dic1中的冲突键的值。

当dic2中的键不与dic1中键冲突时,则会在dic1中新增dic2中的键值对。

方法三:dic1.update(key,default_value)

 setdefault()方法可以用于在字典中获取指定键的值,如果该键不存在,它会在字典中添加该键,并设置对应的默认值。如果键已经存在于字典中,则会返回该键对应的值,不会对字典做任何修改。

setdefault()方法的语法如下:

1 |dict.setdefault(key,default_value)

其中,dict表示要操作的字典对象,key是要获取或添加的键,default_value是可选参数,表示在键不存在时设置的默认值。如果省略default_value参数,则默认为None 。
setdefault()方法的返回值
setdefault()方法的返回值是获取或添加的键的值。如果键已经存在于字典中,则返回该键对应的值;如果键不存在,则返回设置的默认值。

1、万能的方括号[],如果dic['key']单独使用,则是获取键所对应的值,如果dic['key'] = 值,则根据键存在与否,可以修改键所对应的值,也可以新增键值对。

2、使用第一种方法,方括号[]法比较方便,update方法也比较方便。

3、注意,在使用时不小心经常犯下面的错误:注意student.get('score')是获取的值,是表达式,不能作为左值。

import sys  # 导入sys模块

n = int(input())  # 从输入读取一个整数n,表示后续输入的行数
dic = {}  # 初始化一个空字典dic

for i in range(n):  # 循环n次,读取n行输入
    line = input().split()  # 读取一行输入,并按空格分割成列表line
    key = int(line[0])  # 将列表的第一个元素转换为整数,作为字典的键
    value = int(line[1])  # 将列表的第二个元素转换为整数,作为字典的值
    dic[key] = dic.get(key, 0) + value  # 更新字典中的键值对,如果键不存在,则值默认为0,并加上当前值

# 输出字典中的键值对
for each in sorted(dic):  # 按键的升序排序字典的键
    print(each, dic[each])  # 逐个打印排序后的键及其对应的值

get()函数:python字典get用法_详细解析python字典get()实例教程

get()是查找并返回字典中的某个键的值,找到则返回该值,找不到则返回None。

字典方法get()有两个参数,

  • key :(必选)指定要搜索的键
  • value :(可选)如果键不存在,就返回指定内容

返回值

  • 如果键存在,就返回键对应的值
  • 如果键不存在,就返回指定内容或None

字典中「嵌套」字典时,可以多次调用 get() ,来取值。

get() dict[key] 都可以根据键获取字典的值,不同的是

get() 的键在字典中不存在时,会返回「None」「指定内容」;dict[key] 的键在字典中不存在时,会「报错」 KeyError: ‘key3’

get() 可以「统计」列表元素出现的「个数」,将统计结果保存到字典中

Python中还有一种方法可以判断字典中是否有某个值,这种方法就是恒等运算符。

字典中的恒等运算符是 is 和 is not。(调用get()函数,查询某一个键值对应value, 看其是否存在)

=、==和is的区别

1、=在任何编程语言中都是赋值,赋值是引用,引用是引用内存地址。

2、==是比较两个值是否相等,比较的是两个对象的内容是否相等,即内存地址可以不同,内容相同就行。

3、 is是比较两个实例对象是不是完全相同,它们是不是同一个对象,即id是不是相同,是不是占用同一块内存空间。

4、 is 运算符比==效率高,在变量和None进行比较时,应该使用is。

  • 27
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HJ212是一种污染物在线监测仪器设备的数据通信协议,其组帧格式是固定的,由起始符、长度、命令类型、数据域、校验码和结束符组成。具体的组帧格式可以参考HJ212协议文档。 下面是一个使用单向链实现HJ212组帧的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define HJ212_START_CHAR 0x3A // 起始符 #define HJ212_END_CHAR 0x0D // 结束符 typedef struct hj212_frame { int len; // 长度 char cmd[4]; // 命令类型 char* data_field; // 数据域 char checksum; // 校验码 } hj212_frame_t; // 计算校验码 char hj212_checksum(char* data_field, int len) { char checksum = 0; for (int i = 0; i < len; i++) { checksum ^= data_field[i]; } return checksum; } // 创建一个HJ212帧 hj212_frame_t* hj212_create_frame(char* cmd, char* data_field) { hj212_frame_t* frame = (hj212_frame_t*)malloc(sizeof(hj212_frame_t)); if (frame == NULL) { return NULL; } frame->len = strlen(data_field); strncpy(frame->cmd, cmd, 4); frame->data_field = (char*)malloc(frame->len); strncpy(frame->data_field, data_field, frame->len); frame->checksum = hj212_checksum(frame->data_field, frame->len); return frame; } // 将HJ212帧转换为字符串 char* hj212_frame_to_string(hj212_frame_t* frame) { char* str = (char*)malloc(frame->len + 9); sprintf(str, "%c%04X%s%c%c", HJ212_START_CHAR, frame->len, frame->cmd, frame->checksum, HJ212_END_CHAR); return str; } int main() { char cmd[] = "8103"; // 命令类型 char data_field[] = "010000"; // 数据域 hj212_frame_t* frame = hj212_create_frame(cmd, data_field); if (frame == NULL) { printf("Failed to create HJ212 frame.\n"); return -1; } char* str = hj212_frame_to_string(frame); printf("HJ212 frame: %s\n", str); free(frame->data_field); free(frame); free(str); return 0; } ``` 在上面的示例代码中,我们定义了一个HJ212帧的结构体,包含长度、命令类型、数据域、校验码等信息。`hj212_create_frame`函数用于创建一个HJ212帧,该函数接受命令类型和数据域作为参数,并返回一个指向HJ212帧结构体的指针。`hj212_frame_to_string`函数将HJ212帧转换为字符串格式。 使用单向链来实现HJ212组帧需要根据具体的应用场景来设计链节点。在本例中,我们可以将HJ212帧作为链节点的数据域,将指向下一个节点的指针作为链节点的指针域。每次创建一个HJ212帧时,我们将其作为一个新的链节点插入到链的末尾。对于HJ212帧的发送和接收,我们可以使用串口通信或者TCP/IP通信等技术来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值