Python 基于一个键查找多键词典的所有键

Python 基于一个键查找多键词典的所有键,python,dictionary,Python,Dictionary,我有一个字典,其中每个值分配了3个键:dictTest[c,pH,T]=value。我想检索与给定单键对应的所有值:dictTest[c,*,*]=value(s) 我在网上查了一下,但找不到Python的任何解决方案,只有C#。我尝试过使用dictTest[c,*,*],但出现语法错误。我可以看到的另一个选项是使用多级键,即第一级为c,第二级为pH,依此类推,即dictTest[c][pH][T]=value(from) 下面是一些测试代码: dictTest={} dictTest[1,10

我有一个字典,其中每个值分配了3个键:
dictTest[c,pH,T]=value
。我想检索与给定单键对应的所有值:
dictTest[c,*,*]=value(s)

我在网上查了一下,但找不到Python的任何解决方案,只有C#。我尝试过使用
dictTest[c,*,*]
,但出现语法错误。我可以看到的另一个选项是使用多级键,即第一级为
c
,第二级为
pH
,依此类推,即
dictTest[c][pH][T]=value
(from)

下面是一些测试代码:

dictTest={}
dictTest[1,100,10]=10
dictTest[1,101,11]=11
下面给出了一个语法错误:

print(dictTest[1,*,*])
尝试仅指定一个键时,会出现键错误:

print(dictTest[1])
我也尝试过上面提到的多级键,但在尝试定义字典时会出现语法错误:

dictTest[1][100][10]=10

在上面的示例中,我只想指定第一个键(即
key1=1
),并返回字典的两个值,因为两者的第一个键值都是1

谢谢,
Mustafa.

字典的键是一个由3个值组成的
元组。它不是一个可以根据元组中的一个元素高效搜索的“多键”命令

您可以基于第一个键执行线性搜索,也可以仅使用第一个键创建另一个字典,如果重复访问,效率会更高

由于键重复,您需要一个列表作为值。例如,将值设为包含键其余部分和当前值的元组。如下所示:

dictTest={}
dictTest[1,100,10]=10
dictTest[1,101,11]=11
dictTest[2,101,11]=30

import collections

newdict = collections.defaultdict(list)

for (newkey,v2,v3),value in dictTest.items():
    newdict[newkey].append(((v2,v3),value))
现在
newdict[1]
[((101,11),11),((100,10),10)]
(与此键匹配的所有值的列表,加上-添加-原始键的其余部分,因此不会丢失数据)

整条格言:

>>> dict(newdict)
{1: [((101, 11), 11), ((100, 10), 10)], 2: [((101, 11), 30)]}

要创建多级嵌套字典,可以使用递归创建的:

输出:

defaultdict(<function recursive_defaultdict at 0x1061fe848>, {10: 10})
defaultdict(,{10:10})

另一个要实施的选项是:

from collections import defaultdict

dictTest = defaultdict(lambda: defaultdict(dict))
dictTest[1][100][10] = 10
dictTest[1][101][11] = 11

print(dict(dictTest[1]))
输出为:

{100: {10: 10}, 101: {11: 11}}

嗨,Mustafa,你看过Python教程了吗?字典键没有通配符语法,也没有你写的多个键。如果键是按你写的方式创建的,那么键就是3个数字的整个元组,没有办法通过一个组件高效地检索它们。你需要一个不同的数据结构(一本字典词典)。
from collections import defaultdict

dictTest = defaultdict(lambda: defaultdict(dict))
dictTest[1][100][10] = 10
dictTest[1][101][11] = 11

print(dict(dictTest[1]))
{100: {10: 10}, 101: {11: 11}}