单独获取字典中的键和值、并进行字典排序——Python

本文介绍了Python中字典的基本操作方法,包括遍历键-值对、仅遍历键或值的方式,并提供了如何对字典进行排序的具体实例。通过本文,读者可以学会如何更高效地管理和使用Python字典。

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

1、首先遍历字典所有的键-值对可以使用items()

dict_name={k:v for k,v in zip(range(1,len(names)+1),names) }
print(dict_name)

for i,j in dict_name.items():
  print(str(i) + ':' + j)

2、只遍历键时可以使用keys(),还可以使用sorted()进行排序

names = ['bob', 'tom', 'alice', 'jerry', 'wendy', 'smith','we','jerry']
dict_name={k:v for k,v in zip(range(1,len(names)+1),names) }

for i in dict_name.keys():
    print(i)

#对 key 按照排序之后的结果输出
for j in sorted(dict_name.keys(),reverse=True):
    print(j)

3、只遍历值时,可以使用values(),还可以使用set()去除值中重复的值

names = ['bob', 'tom', 'alice', 'jerry', 'wendy', 'smith','we','jerry']
dict_name={k:v for k,v in zip(range(1,len(names)+1),names) }

for i in dict_name.values():
    print(i)

#对value 进行输出,去除重复的值
for j in set(dict_name.values()):
    print(j)

4、字典排序

这样一来,我们就可以对字典进行排序了
话不多说,直接上代码

names = {1:'bob', 7:'tom', 3:'alice', 2:'jerry', 4:'wendy', 6:'smith',8:'we',5:'jerry'}

new_name = sorted(names.items(),key = lambda names:names[0],reverse=True)

print(new_name)

注意:
一般情况下使用sorted()排序,不要使用sort()排序,这是因为:
sorted()不会改变原始的列表或字典的顺序;
sort()是原址排序

<think>嗯,用户这次的问题非常聚焦,是关于系统功能设计中数据字典相关的三个核心模块的实现方式最佳实践。从用户精准的术语使用来看,应该是资深的技术人员或系统架构师,对基础概念已有理解,需要的是落地方案行业经验。用户提到的“数据字典管理”“字典管理”“码映射管理”其实是递进关系,需要分层解析。首先得厘清三者的边界:数据字典是存储架构,码管理是内容维护,映射管理则是跨系统对接的关。用户特意要求参考上次回复,但上次讨论的是快速排序算法,领域差异较大,重点还是回到当前主题。实现方式上,数据库设计必须优先考虑扩展性——比如域表的主用复合字典ID+码)比自增ID更利于分布式环境。最佳实践部分,微服务架构下独立字典服务的经验得强调,我们团队在金融项目里就吃过没做版本控制的亏。特别要注意用户提到的“码映射管理”,这是多系统集成时的痛点。需要区分静态映射(配置文件)动态映射(规则引擎)的场景,上次医疗项目里HL7标准转内部码就用了动态规则库。另外异常处理机制必须单独说明,用户可能没明说但这是上线后的高频问题。安全问题容易被忽略,要提醒返回带权限的字典列表。性能方面缓存策略可以展开,但用户没问细节就先给主干方案。最后考虑附上ID转换场景的案例增强实用性——毕竟用户要的是“实现方式”而非理论。</think> 以下是关于数据字典管理、字典管理及码映射管理的核心实现方式与最佳实践,结合分层架构实际应用场景进行说明: --- ### 一、数据字典管理(Data Dictionary Management) **作用**:存储系统所有基础数据元数据的中央知识库,例如字段名、类型、约束、业务含义等。 **实现方式**: 1. **数据库表设计** ```sql CREATE TABLE sys_data_dictionary ( id BIGINT PRIMARY KEY, -- 唯一标识 dict_code VARCHAR(50) UNIQUE, -- 字典编码 (e.g. "gender") dict_name VARCHAR(100), -- 字典名称 (e.g. "性别") description TEXT, -- 描述 is_system BOOLEAN DEFAULT false, -- 是否系统内置 create_time TIMESTAMP ); ``` 2. **缓存策略** - 启动时全量加载字典元数据到Redis/Memcached - 变更时通过Pub-Sub消息更新缓存 **最佳实践**: - **统一管理入口**:提供WEB界面供管理员增删改查 - **版本控制**:记录字典变更历史,支持回滚[^1] - **依赖分析**:检测字段被哪些模块引用,避免误删 --- ### 二、字典管理(Code Value Management) **作用**:管理字典的具体枚举,如性别字典中的"男/女/未知"。 **实现方式**: 1. **数据库设计** ```sql CREATE TABLE sys_dict_code ( id BIGINT PRIMARY KEY, dict_id BIGINT REFERENCES sys_data_dictionary(id), -- 关联字典 code_value VARCHAR(50), -- 码 (e.g. "M") code_label VARCHAR(100), -- 显示标签 (e.g. "男") sort INT DEFAULT 0, -- 排序 is_active BOOLEAN DEFAULT true -- 是否启用 ); ``` 2. **API设计** ```java // 示例:按字典编码获取列表 @GetMapping("/codes/{dictCode}") public List<CodeDTO> getCodes(@PathVariable String dictCode) { return dictService.getCodesByDictCode(dictCode); } ``` **最佳实践**: - **多语言支持**:`code_label` 字段存多语言JSON (`{"zh-CN":"男", "en-US":"Male"}`) - **生命周期控制**:禁用码时自动检查业务数据依赖 - **批量导入**:支持Excel模板导入码 --- ### 三、码映射管理(Code Mapping Management) **作用**:解决不同系统间码差异问题(如外部系统用"1/2"表示性别,内部用"M/F")。 **实现方式**: 1. **映射表设计** ```sql CREATE TABLE sys_code_mapping ( src_system VARCHAR(50), -- 源系统标识 src_dict_code VARCHAR(50), -- 源字典编码 src_code_value VARCHAR(50), -- 源码 target_code_value VARCHAR(50), -- 目标码 PRIMARY KEY (src_system, src_dict_code, src_code_value) ); ``` 2. **动态转换逻辑** ```python def convert_code(src_system, dict_code, src_value): cache_key = f"mapping:{src_system}:{dict_code}" # 从缓存获取映射规则 mapping_rules = cache.get(cache_key) return mapping_rules.get(src_value, "DEFAULT") ``` **最佳实践**: - **双向映射**:支持A→BB→A双向转换 - **版本化映射规则**:按时间生效(适应第三方系统变更) - **异常处理**:未匹配时返回默认触发告警 --- ### 四、整体最佳实践 1. **解耦设计** - 独立字典微服务,提供统一API - 前端通过API拉取码,避免硬编码 ```javascript // 前端动态加载性别字典 fetch('/api/dict/codes/gender').then(res => { res.data.forEach(item => { options.push({label: item.codeLabel, value: item.codeValue}) }) }) ``` 2. **性能优化** - 码查询响应时间<100ms(通过缓存实现) - 高频字典预加载到内存(如国家列表) 3. **监控能力** - 字典访问量统计 - 映射失败率告警阈设置(如>5%触发) 4. **安全控制** - 敏感字典(如用户等级)返回时做权限过滤 - 操作审计:记录字典的增删改日志[^2] --- ### 五、典型应用场景 **案例:订单状态转换** - **原始码**:`10=待支付,20=已支付`(内部使用) - **对接支付系统**:需映射为`0=Pending, 1=Completed` - **实现过程**: 1. 在`sys_code_mapping`配置映射: `(src_system='PAYMENT', src_dict_code='order_status', src_code_value='10', target_code_value='0')` 2. 调用支付接口前自动转换状态码 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值