在TypeScript中如何实现Python中常用的dict类型及操作

TypeScript 中对象键值对操作及排序示例

在 Python 中,我们可以通过d['k'] = v向字典d添加键值对,并通过d['k']获取值。在 TypeScript 中,使用对象(Object)可以实现类似的功能,同时还能通过数组方法实现按键或按值排序。

一、添加和获取键值对(类似 Python 字典操作)

TypeScript 中通过对象字面量或接口定义的对象,支持动态添加和访问键值对,语法与 Python 字典类似。

基础示例

css 复制代码
// 1. 定义一个空对象(类似Python的空字典 {})
let d: { [key: string]: any } = {}; // [key: string] 表示键为字符串类型,值为任意类型
// 2. 添加键值对(类似 Python 的 d['k'] = v)
d['name'] = 'TypeScript';
d['version'] = 5.2;
d['isPopular'] = true;
// 3. 获取值(类似 Python 的 d['k'])
console.log(d['name']); // 输出:TypeScript
console.log(d['version']); // 输出:5.2

类型约束(推荐)

为了保持 TypeScript 的类型安全,可指定键和值的具体类型(类似 Python 的类型注解):

css 复制代码
// 键为 string 类型,值为 number 类型(如统计分数)
let scores: { [key: string]: number } = {};
scores['Alice'] = 95;
scores['Bob'] = 88;
console.log(scores['Alice']); // 输出:95

二、对象按键(key)排序

Python 中可通过sorted(d.keys())获取排序后的键,TypeScript 需先将对象转换为键值对数组,再排序。

实现步骤:

  1. 用Object.entries()将对象转为[key, value]数组;
  1. 用sort()按键排序;
  1. (可选)转回对象(注意:对象本身是无序的,排序后通常保留数组形式)。
css 复制代码
// 原始对象
const d: { [key: string]: number } = {
  'banana': 3,
  'apple': 5,
  'cherry': 2
};
// 1. 转为 [key, value] 数组
const entries = Object.entries(d); // 结果:[ ['banana', 3], ['apple', 5], ['cherry', 2] ]
// 2. 按键(key)升序排序(字母顺序)
const sortedByKey = entries.sort((a, b) => {
  if (a[0] < b[0]) return -1; // a的键在b前面
  if (a[0] > b[0]) return 1;
  return 0;
});
console.log('按键排序结果:', sortedByKey);
// 输出:[ ['apple', 5], ['banana', 3], ['cherry', 2] ]

三、对象按值(value)排序

类似按键排序,区别是排序依据为数组中的第二个元素(值)。

css 复制代码
// 原始对象(同上)
const d: { [key: string]: number } = {
  'banana': 3,
  'apple': 5,
  'cherry': 2
};
// 1. 转为 [key, value] 数组
const entries = Object.entries(d);
// 2. 按值(value)升序排序(数字大小)
const sortedByValue = entries.sort((a, b) => {
  return a[1] - b[1]; // 数字相减,负数表示a的值更小
});
console.log('按值排序结果:', sortedByValue);
// 输出:[ ['cherry', 2], ['banana', 3], ['apple', 5] ]
// 按值降序排序(反转结果)
const sortedByValueDesc = entries.sort((a, b) => b[1] - a[1]);
console.log('按值降序排序结果:', sortedByValueDesc);
// 输出:[ ['apple', 5], ['banana', 3], ['cherry', 2] ]

四、与 Python 的对比总结

操作 Python 代码 TypeScript 代码
添加键值对 d['k'] = v d['k'] = v
获取值 d['k'] d['k']
按键排序(返回数组) sorted(d.items(), key=lambda x: x[0]) Object.entries(d).sort((a,b) => a[0].localeCompare(b[0]))
按值排序(返回数组) sorted(d.items(), key=lambda x: x[1]) Object.entries(d).sort((a,b) => a[1] - b[1])

注意:TypeScript 的对象本身不保证顺序(ES6+ 实际保留插入顺序),排序后通常以数组形式使用,更符合有序遍历的需求。

##🚀 五、 操作扩展技巧

  1. 合并对象(类似 Python 字典的 update())
css 复制代码
   const d1 = { a: 1 };
   Object.assign(d1, { b: 2 }); // d1 变为 { a: 1, b: 2 }
  1. 删除键
go 复制代码
   delete d["k"];     // 对象方案
   d.delete("k");     // Map 方案
  1. 默认值处理
ini 复制代码
   const value = d["unknown"] ?? "default"; // 对象方案
   const value = d.get("unknown") || "default"; // Map 方案

Map方案代码,适合:键类型复杂(如对象)、需严格迭代顺序或高频增删

typescript 复制代码
// 初始化 Map(键类型为 string,值类型为 any)
const d = new Map<string, any>();

// 操作示例
d.set("k", "v");        // 添加键值对
console.log(d.get("k")); // 输出 "v"(访问值)

// 支持遍历
for (const [key, value] of d) {
    console.log(`${key}: ${value}`);
}
相关推荐
花花无缺2 分钟前
python自动化-pytest-用例发现规则和要求
后端·python
_r0bin_9 分钟前
分片上传-
前端·javascript·状态模式
东北南西13 分钟前
手写React状态hook
前端·javascript·react.js
诗书画唱14 分钟前
【前端教程】JavaScript DOM 操作实战案例详解
开发语言·前端·javascript
YUELEI11833 分钟前
langchain 提示模版 PromptTemplate
python·langchain
东方不败之鸭梨的测试笔记36 分钟前
LangChain: Models, Prompts 模型和提示词
人工智能·python·langchain
quan263144 分钟前
Vue实践篇-02,AI生成代码
前端·javascript·vue.js
AI Echoes1 小时前
别再手工缝合API了!开源LLMOps神器LMForge,让你像搭积木一样玩转AI智能体!
人工智能·python·langchain·开源·agent
AI Echoes1 小时前
从零构建企业级LLMOps平台:LMForge——支持多模型、可视化编排、知识库与安全审核的全栈解决方案
人工智能·python·langchain·开源·agent
小桥风满袖2 小时前
极简三分钟ES6 - 类与继承
前端·javascript