【JS | Py】如何获取对象(字典)的子集

本文介绍了如何在前端和后端通过对象解构和Python字典过滤,避免接口接收多余键值对的问题。展示了JavaScript的ObjectDestructuring技术和Python中针对特定键值对的筛选操作。

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

今天在写前端接口请求代码时,出现接口因收到多余json键值对而导致的异常,故需要前端在发送请求前对发送的对象进行过滤

let object = { a: 5, b: 6, c: 7  };
object = (({ a, c }) => ({ a, c }))(object);

let object = [{ a: 5, b: 6, c: 7  }];
object.forEach(function (item, index, theArray) {
  theArray[index] = (({ a, c })=> ({ a, c }))(item)
});

上面的代码用到了js语法中的Object Destructuring(对象解构)
参考:https://stackoverflow.com/a/39333479

如果你的后端语言是Python,则可以使用如下方式在后端对接收到的json进行过滤

object = {'a': 5, 'b': 6, 'c': 7}
object = {key: object[key] for key in ['a', 'c']}

object = [{'a': 5, 'b': 6, 'c': 7}]
object = [{key: item[key] for key in ['a', 'c']} for item in object]
<think>好的,用户想在LVGL框架下创建一个适用于汉字键盘的完整常用汉字字典。我需要先理解用户的具体需求。LVGL是一个轻量级的图形库,主要用于嵌入式设备的UI开发。汉字键盘通常需要处理输入法,可能需要常用汉字的列表以及对应的拼音或笔画信息。 首先,用户提到的生成字典,可能需要包含常用汉字及其拼音,或者五笔编码等输入方式。用户之前引用了cnchar库,这个库处理汉字拼音和笔画数,但可能是在JavaScript环境中使用的。而LVGL通常是用C语言开发的,所以需要考虑如何在C语言环境下处理汉字数据。 接下来,我需要确定常用汉字的范围。通常,GB2312标准包含6763个汉字,覆盖了99%的使用情况。另外,Unicode的CJK基本集有20902字,但常用的大约是3500-7000字。所以建议用户使用GB2312的字符集,可能比较适合嵌入式设备的资源限制。 然后,数据结构方面,LVGL可能需要一个数组来存储汉字和对应的拼音。每个汉字可以用Unicode编码表示,拼音则需要存储字符串。例如,结构体可能包含unicode码和拼音数组。 但是,C语言中处理汉字可能需要注意编码问题,比如使用UTF-8编码。同时,考虑到嵌入式系统的内存限制,字典的大小需要优化,可能需要进行压缩或者分块加载。 用户还需要生成拼音数据,这时候可能需要一个离线工具来处理。比如用Python脚本读取GB2312字符集,利用第三方库如pypinyin来获取每个汉字的拼音,然后生成C语言的结构体数组。 另外,用户可能需要考虑多音字的问题。例如,“重”有chong和zhong两个读音,如何处理?在输入法中,可能需要存储所有可能的拼音,或者根据上下文选择,但在键盘中可能需要用户选择。因此,字典中需要包含多音字的所有拼音,或者只保留常用读音,这取决于用户的需求。 还有,键盘的布局问题。LVGL的键盘部件通常需要定义按键的映射,可能每个按键对应多个字符。对于中文键盘,可能需要拼音输入法的虚拟键盘,或者是笔画输入法。如果是拼音键盘,可能需要将汉字按拼音首字母分组,方便用户查找。 最后,需要考虑如何将这个字典集成到LVGL中。可能需要注册输入设备,处理输入事件,根据用户输入的拼音匹配候选汉字,并显示在键盘上。这部分可能需要LVGL的输入设备接口和事件回调函数。 总结步骤应该是:确定字符集范围,生成汉字拼音数据,转换为C语言结构,集成到LVGL的键盘组件中,处理输入逻辑。同时,注意内存优化和多音字处理。</think>创建适用于LVGL汉字键盘的常用汉字字典需要以下步骤: ### 一、确定常用汉字范围 1. 采用国家标准GB2312字符集(含6763个汉字),覆盖99%日常使用场景[^1] 2. 或选用Unicode CJK基本集(20902字)的子集 3. 推荐使用精简集(约3500常用字) ### 二、数据结构设计 ```c typedef struct { uint32_t unicode; // Unicode编码 const char* pinyin; // 拼音字符串 uint8_t stroke; // 笔画数(可选) } HanziEntry; // 示例字典数组 static const HanziEntry hanzi_dict[] = { {0x4E00, "yi", 1}, // 一 {0x4E8C, "er", 2}, // 二 {0x4E09, "san", 3}, // 三 // ...其他汉字 }; ``` ### 三、生成汉字数据 使用Python生成C代码(需要安装`pypinyin`库): ```python from pypinyin import pinyin def generate_dict(): with open('gb2312_chars.txt', 'r', encoding='utf-8') as f: chars = f.read() c_code = "static const HanziEntry hanzi_dict[] = {\n" for char in chars: hex_code = f"0x{ord(char):04X}" py = ''.join(pinyin(char, style=0)[0]) c_code += f" {{{hex_code}, \"{py}\", 0}},\n" c_code += "};\n" with open('hanzi_dict.c', 'w', encoding='utf-8') as f: f.write(c_code) ``` ### 四、LVGL键盘集成 1. 创建拼音输入法容器: ```c lv_obj_t *kb = lv_keyboard_create(lv_scr_act()); lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_TEXT_UPPER); ``` 2. 实现输入匹配: ```c void input_cb(lv_event_t *e) { const char *txt = lv_textarea_get_text(ta); uint16_t match_count = 0; for(int i=0; i<hanzi_dict_size; i++){ if(strstr(hanzi_dict[i].pinyin, txt)){ show_candidate(hanzi_dict[i].unicode); match_count++; } if(match_count > 8) break; // 限制候选数量 } } ``` ### 五、优化策略 1. 多级字典缓存:按拼音首字母分组存储 2. 使用二分查找加速检索 3. 压缩存储格式(可减少30%内存占用)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值