如果我有一个包含这些词典的文件:
{
"dict1" : {
"data1" : "a",
"data2" : "b",
"data3" : "c",
"data4" : "d",
"data5" : "e"
},
"dict2" : {
"data1" : "f",
"data2" : "g",
"data3" : "h",
"data4" : "i",
"data5" : "j"
}
我如何访问每个字典键“data3”。这样输出将是:
c, h
因为文件中有多个字典,所以我不知道名字。无论如何都要迭代它们来取出那些键吗?
答案 0 :(得分:5)
>>> ', '.join(subdict['data3'] for subdict in maindict.values())
'c, h'
说明:
您的数据是字典maindict
,其中的密钥为'dict1'
和'dict2'
。
>>> for key in maindict.keys():
... print key
dict1
dict2
我们对密钥不感兴趣,但想要这些值(实际上是两个字典):
>>> for value in maindict.values():
... print value
{"data1" : "a",
"data2" : "b",
"data3" : "c",
"data4" : "d",
"data5" : "e"}
{"data1" : "f",
"data2" : "g",
"data3" : "h",
"data4" : "i",
"data5" : "j"}
获取与键'data3'
对应的子词典中的值:
>>> for subdict in maindict.values():
... print subdict['data3']
c
h
你说你想要一个逗号分隔的结果。 str.join
允许您使用其他字符作为分隔符加入一系列字符串:
>>> ', '.join(['William', 'Shatner', 'Speaks', 'Like', 'This'])
'William, Shatner, Speaks, Like, This'
最后一个难题是我们可以使用generator expression动态生成序列来创建生成器:
>>> results = (subdict['data3'] for subdict in maindict.values())
>>> results
<generator object <genexpr> at 0x03115710>
您可以将生成器传递到预期序列的任何位置:
>>> list(results)
['c', 'h']
因此,我们使用str.join
生成器表达式:
>>> ', '.join(subdict['data3'] for subdict in maindict.values())
'c, h'
答案 1 :(得分:1)
假设字典只在示例中嵌套一次,您可以使用简单的列表解析,如下所示:
display.save( display.currentStage, { filename="entireScreen.jpg", baseDir=system.DocumentsDirectory, isFullResolution=true } )
这会遍历原始字典(dct = [v["data3"] for v in oridict.values()]
),将值存储到oridict
,这应该是另一个字典,然后对于原始字典中的每个值v
,它会得到v
的价值。
答案 2 :(得分:1)
假设你有这样的词典(你忘记了结束}
):
dct = {
"dict1" : {
"data1" : "a",
"data2" : "b",
"data3" : "c",
"data4" : "d",
"data5" : "e"
},
"dict2" : {
"data1" : "f",
"data2" : "g",
"data3" : "h",
"data4" : "i",
"data5" : "j"}
}
只需使用生成器表达式:
>>> i_key = 'data3' # inner key
>>> for value in (dct[o_key][i_key] for o_key in dct if i_key in dct[o_key]):
... print(value)
h
c
如果嵌套字典中存在data3
值,则只会打印class PDF extends FPDF
{
// header-footer
}
$pdf = new PDF();
$pdf->SetFont('Arial','U',12);
$pdf->AliasNbPages();
for($j=0;$j<sizeof($idscat);$j++) {
// new pdf page dor a new category
$pdf->AddPage('L');
for($i=0;$i<sizeof($idscat[$j]);$i++) {
// inserting rectangles with names
$pdf->Cell(50,10,$z.". ".$idscat[$j][$i]["nume"].' '.$idscat[$j][$i]["prenume"],1,1);
$pdf->Ln(2);
}
}
值,否则只会跳过它。
答案 3 :(得分:1)
所以,如果我理解正确,&#34; dict1&#34;和&#34; dict2&#34;是未知的名称,数量未知,但每个都有一个&#34; data3&#34;你想得到的价值? (顺便说一下,&#34; data3&#34;是关键,c和h是值)。
要做到这一点,我们假设整个事情已被读入并存储在all_data
中。如果您不知道如何执行此操作,我建议您查看json
模块,因为它基本上是json格式。
for k,v in all_data.items():
# v will now hold the sub-dictionary, so we can just grab "data3":
print v.get('data3',"") # I used the .get() method incase "data3" doesn't exist
答案 4 :(得分:-1)
您也可以使用此代码:
TargetKey= 'data3'
output = map(lambda D:S[D].get(TargetKey, ''), S )
', '.join(output) # or simply loop throw output