从给定的字典中查找,如下所示:
int main(){
char a[4];
while(scanf("%s",&a)!=EOF){
int b,c;
scanf("%d",&b);
for(c=1;c<=b;c++){
char d[100];
int e,f=0,g=0;
scanf("%s",&d);
for(e=0;e<=3;e++)
if(a[e]==d[e])
f++;
for(e=0;e<=3;e++)
if(a[e]!=d[e]&&a[e]==d[(e+1)%4]||a[e]==d[(e+2)%4]||a[e]==d[(e+3)%4])
g++;
printf("%dA%dB\n",f,g);
}
}
return 0;}
我想按以下方式检索嵌套组的所有键:
QListView::item {
border:none
}
输出可能在新的词典中,输出的顺序并不重要,所有叶子元素都应忽略。嵌套级别的数量应该是任意的,因为嵌套可能会“无限地”进行。
这是我当前的代码:
{
'parent1': {
'child1-1': {
'element1': 'val1',
'element2': 'val2'
},
'child1-2': {
'element1': 'val1',
'element2': 'val2'
}
},
'parent2': {
'child2-1': {
'subchild2-1-1': {
'subelement1': 'val1'
},
'element2': 'val2'
},
'child2-2': {
'element1': 'val1',
'element2': 'val2'
}
}
}
哪个返回以下内容:
'parent1': ['child1-1', 'child1-2']
'child1-1': ['element1', 'element2']
'child1-2': ['element1', 'element2']
'parent2': ['child2-1', 'child2-2']
'child2-1': ['subchild2-1-1', 'element2']
'subchild2-1-1': ['subelement1']
'child2-2': ['element1', 'element2']
这显然是不完整的,因为缺少子组。我觉得我太复杂了...
答案 0 :(得分:1)
这就是您想要的:
def retrieve_groups(d, ret={}):
ret.update({key: [subkey for subkey in value]
for key, value in d.items() if isinstance(value, dict)})
for value in d.values():
if not isinstance(value, dict):
continue
retrieve_groups(d=value, ret=ret)
return ret
我在其中使用ret
作为可变参数,该参数在递归过程中更新。其余的应该简单明了。
输出为:
{ 'child1-1': ['element1', 'element2'],
'child1-2': ['element1', 'element2'],
'child2-1': ['subchild2-1-1', 'element2'],
'child2-2': ['element1', 'element2'],
'parent1': ['child1-1', 'child1-2'],
'parent2': ['child2-1', 'child2-2'],
'subchild2-1-1': ['subelement1']}