Python打印所有词典中的键

时间:2016-04-29 21:11:13

标签: python python-3.x dictionary

如果我有一个包含这些词典的文件:

{
    "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

因为文件中有多个字典,所以我不知道名字。无论如何都要迭代它们来取出那些键吗?

5 个答案:

答案 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