Python 基于一个键查找多键词典的所有键
我有一个字典,其中每个值分配了3个键: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
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}}