Python - 多键值字典

本文最后更新于:2022年7月4日 上午

Python 字典是基本的数据结构之一,有时需要用到多个键值维护一组数据,事实上python的 dict 已经支持类似功能,本文记录实现方法。

python 字典简介

  • 字典是另一种可变容器模型,且可存储任意类型对象。

  • 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:

    1
    d = {key1 : value1, key2 : value2 }

    [1]

  • python 中字典的 key 要求可哈希,而且必须不可变,可以用数字、字符串、元组作为键值(列表不可以)

多键值需求描述

  • 我们需要查找某个数据需要多组key,好像多维空间中的坐标轴,维度数量可能可变可能不变

  • 对于多键值的实现有两种思路:

    • 单 key 多键值
    • 多 key
  • 用例:

    编号 数据 key1 key2 key3
    1 ‘hello’ ‘foo’ ‘bar’ -
    2 ‘world’ ‘nice’ ‘to’ ‘see’
    3 ‘do not reply’ ‘you’ ‘again’ -

    - 为空

单 key 多键值

  • 字典中的 key 是唯一的,但是元组可以作为 key,因此把多组关键词用元组包裹起来可以作为唯一的 key 使用

  • 形式如下:

    1
    dict ={(ke11,key12): value, (key21,key22):value ...}
  • 使用时形式:

    1
    2
    3
    dict[key11,key12]
    # 或
    dict[(key11,key12)]
  • 示例代码

1
2
3
4
5
6
7
8
A = dict()
A[('foo', 'bar')] = 'hello'
A['nice', 'to', 'see'] = 'world'
A['you', 'again'] = 'do not reply'
print(A)

->
{('foo', 'bar'): 'hello', ('nice', 'to', 'see'): 'world', ('you', 'again'): 'do not reply'}
  • 该方式组成的多键值字典可以同时兼容多个维度的数据,毕竟只要是没见过的元组都可以作为 key

多 key

  • key 多键值的方法事实上已经可以解决很多问题,如果需要比较严格地控制维度可以尝试多 key 的实现方式

  • 方法核心为构造字典的值为新的字典

  • 示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

A = {
'foo': {'bar' : 'hello'},
'nice': {'to': {'see': 'world'}},
'you': {'again': 'do not reply'}
}

print(A)
print(A['foo']['bar'])
print(A['nice']['to']['see'])
print(A['you']['again'])

->
{'foo': {'bar': 'hello'}, 'nice': {'to': {'see': 'world'}}, 'you': {'again': 'do not reply'}}
hello
world
do not reply
  • 这种方式的问题比较多:
    • 组织需要精心,层层字典需要精神是分专注
    • 某个 key 下值需要成为字典才可以增加关键词层数,那么这个值就无法成为其他有意义的内容
    • 适用于维度固定(容易维护),需要漂亮的取值代码时使用

参考资料


Python - 多键值字典
https://www.zywvvd.com/notes/coding/python/python-multi-key-dict/python-multi-key-dict/
作者
Yiwei Zhang
发布于
2022年1月17日
许可协议