在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: x0) Object.entries(d).sort((a,b) => a0.localeCompare(b0))
按值排序(返回数组) sorted(d.items(), key=lambda x: x1) Object.entries(d).sort((a,b) => a1 - b1)

注意: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}`);
}
相关推荐
用户938515635078 小时前
从 Prompt 到 Harness:AI 工程化的三年跃迁与实战解码
javascript·人工智能
木木剑光8 小时前
我开源了一个 React 组件库,沉淀了多个高频组件和实用 Hooks
前端·javascript·react.js
竹林8189 小时前
Solana DApp 开发踩坑实录:从零用 @solana/web3.js 实现链上数据查询与交易签名
前端·javascript
梯度不陡9 小时前
Signal #17:Agent 开始进入组织系统
前端·javascript
胡萝卜术10 小时前
从暴力到Z字形消元:力扣240「搜索二维矩阵II」的降维打击之路
前端·javascript·面试
云浪10 小时前
前端二进制数组完全指南:ArrayBuffer、TypedArray、DataView 一次讲透
前端·javascript
铁皮饭盒11 小时前
26年bunjs, elysia+pg一把梭, redis都省了
前端·javascript·后端
花酒锄作田20 小时前
Pydantic校验配置文件
python
hboot20 小时前
AI工程师第四课 - 深度学习入门
pytorch·python·神经网络
kyriewen1 天前
别再对着 TypeScript 报错发呆了:我把 10 个最常见的红色波浪线翻译成了人话
前端·javascript·typescript