小编Chr*_*Cox的帖子

将表转换为分层字典?

我有一张表格:

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)

python dictionary nested

7
推荐指数
2
解决办法
4707
查看次数

Tcl扩展:了解和使用ClientData

我正在努力更新旧软件(编写为针对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)

c tcl

3
推荐指数
1
解决办法
369
查看次数

ObjC:NSDictionary allKeysForObject*包含*(这可能吗?)

我是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".我感觉这不是这个方法的目的.

objective-c nsdictionary

1
推荐指数
1
解决办法
940
查看次数

Python创建列表C = A + B,因此对C的更改会影响A和B.

我不确定我所问的是否可行,但如果是特定应用则会方便.我正在为一个实验建立一个试验列表,其中一个目标可以完全匹配一个素数,或者它可以是一种与目标保持某种关系的特定方式的不匹配.更明确的是,我所有的刺激都属于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)

python reference

0
推荐指数
1
解决办法
121
查看次数

标签 统计

python ×2

c ×1

dictionary ×1

nested ×1

nsdictionary ×1

objective-c ×1

reference ×1

tcl ×1