我有一张表格:
A1, B1, C1, (value)
A1, B1, C1, (value)
A1, B1, C2, (value)
A1, B2, C1, (value)
A1, B2, C1, (value)
A1, B2, C2, (value)
A1, B2, C2, (value)
A2, B1, C1, (value)
A2, B1, C1, (value)
A2, B1, C2, (value)
A2, B1, C2, (value)
A2, B2, C1, (value)
A2, B2, C1, (value)
A2, B2, C2, (value)
A2, B2, C2, (value)
Run Code Online (Sandbox Code Playgroud)
我想在python中使用它作为字典,形式:
H = {
'A1':{
'B1':{
'C1':[],'C2':[],'C3':[] },
'B2':{
'C1':[],'C2':[],'C3':[] },
'B3':{
'C1':[],'C2':[],'C3':[] }
},
'A2':{
'B1':{
'C1':[],'C2':[],'C3':[] }, …Run Code Online (Sandbox Code Playgroud) 我正在努力更新旧软件(编写为针对Tcl/Tk 8.3构建),以便它针对更现代的发行版构建.我将此作为一个学习C和Tcl的机会,这两个项目在我开始时都没有编入过.所以,我是新手.
在学习Tcl API时,最令人困惑的事情之一是ClientData.API中的许多函数都将其作为参数,但C扩展几乎从不使用它.我从这个答案中得到的印象是很少使用全局定义:
整个扩展ClientData适用于想要发布自己的存根表的扩展......其他扩展可以构建.这是一件非常难得的事情; 如果你不想要它,请留空.
因此,它似乎基本上是一个void参数,然后您需要在内部键入强制转换或句柄.但是代码中有一些地方我需要与ClientData进行交互(例如,对于空闲进程,如下所示):
typedef struct graph *Graph;
struct graph {
int num;
int hidden;
int needsRedraw;
...
};
flag drawNow(ClientData data) {
Graph G;
int g = (int) data;
if (!(G = lookupGraph(g))) return TCL_OK;
return drawGraph(G);
}
flag drawLater(Graph G) {
if (!G->needsRedraw && !G->hidden) {
G->needsRedraw = TRUE;
Tcl_DoWhenIdle((Tcl_IdleProc *) drawNow, (ClientData) G->num);
}
return TCL_OK;
}
Run Code Online (Sandbox Code Playgroud)
在编译时,强制转换为整数会产生以下警告:
warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] …Run Code Online (Sandbox Code Playgroud) 我是Objective-C的新手,遇到了NSDictionary方法 allKeysForObject:.似乎非常有用.但是,我有一个NSDictionary,它有几个NSArrays(全长为2),并且由NSStrings键入.基本上,键是项,数组定义它们的两个属性.如果我想拉出所有具有某种属性的项目名称,可以用类似的东西来完成allKeysForObject,或者我应该只是循环遍历字典并生成一个可变数组(似乎效率低下).
我将包含一个代码片段,但我觉得这个问题很有概念,代码不会真正澄清任何内容.哦,到底是怎么回事.这是一些简化的代码:
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:2],nil],@"Car",[NSArray arrayWithObjects:[NSNumber numberWithInt:2],[NSNumber numberWithInt:3],nil],@"Boat",nil];
NSLog(@"%@",[dict allKeysForObject:???]); // this is the line I am not at all sure about.
Run Code Online (Sandbox Code Playgroud)
编辑:谢谢你到目前为止的回复.不过,我不清楚我的问题.我正在寻找一种更通用的方法.我不想检索特定对象的所有键[1,2],但是我想在字典中查找包括NSNumber 1在内的所有数组并返回这些键.所以,如果我添加@"Plane",[NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:3],nil],我想以某种方式查询NSNumber 1并获取@"Car"和@"Plane".我感觉这不是这个方法的目的.
我不确定我所问的是否可行,但如果是特定应用则会方便.我正在为一个实验建立一个试验列表,其中一个目标可以完全匹配一个素数,或者它可以是一种与目标保持某种关系的特定方式的不匹配.更明确的是,我所有的刺激都属于3级分类,形式如下:
H = {
'A1':{
'B1':{
'C1':[],'C2':[],'C3':[] },
'B2':{
'C1':[],'C2':[],'C3':[] },
'B3':{
'C1':[],'C2':[],'C3':[] }
},
'A2':{
'B1':{
'C1':[],'C2':[],'C3':[] },
'B2':{
'C1':[],'C2':[],'C3':[] },
'B3':{
'C1':[],'C2':[],'C3':[] }
}
}
Run Code Online (Sandbox Code Playgroud)
底部的每个列表中的"树"是一组特定的刺激.如果素数和目标匹配,那很简单.如果他们不这样做,我想从同一B组下的另一个C组中随机抽取而无需替换.
我想要的解决方案是利用(我认为)python如何处理引用并创建一个临时列表,我可以从中弹出()一个刺激.因此,如果试验不一致,并且素数来自H [A1] [B1] [C1],我想从列表中弹出():
tempList = H[A1][B1][C2] + H[A1][B1][C3]
Run Code Online (Sandbox Code Playgroud)
然而,大概是因为我追加了两个列表,在字典中的参考名单被打破,所以如果我删除临时列表中的同上,但没有反映在词典.有没有办法保持参考?谢谢!
编辑:这个玩具示例不能按预期工作:
>>> d = {'A':[1,2,3],'B':[4,5,6]}
>>> l = d['A'] + d['B']
>>> l
[1, 2, 3, 4, 5, 6]
>>> l.pop(2)
3
>>> l
[1, 2, 4, 5, 6]
>>> d
{'A': [1, 2, 3], 'B': [4, 5, 6]}
Run Code Online (Sandbox Code Playgroud)