-2

私はこの形の辞書を持っています...

d={'s1':{'a':[1,2,3],'b':[4,5,6]},'s2':{'d':[77,88,99],'e':[666,333,444]}}

だから私はこの形式で印刷したい

s1
a, 1
b,4
s1

s1
a,2
b,5
s1

s1
a,3
b,6
s1

s2
d,77
e,666
s2

s2
d,88
e,333
s2

s2
d,99
e,444
s2

私はこの方法で試しました

for k,v in d.items():
    print k
    for key,val in v.items():
        print key,val[0] # But this v[0] should change and key also should changthat i am not getting for same loop
    print k

そのため、すべての値のメインキーを出力する必要があります。値はもう1つの辞書です。その辞書では、各リスト項目のキーを出力する必要があるたびに、誰でも事前に感謝できます

4

2 に答える 2

3
>>> from itertools import product, starmap
>>> d={'s1':{'a':[1,2,3],'b':[4,5,6]},'s2':{'d':[77,88,99],'e':[666,333,444]}}
>>> for k,v in sorted(d.items()): # use d.iteritems for py2
        for x,y in zip(*starmap(product,sorted(v.items()))):
            print k
            print '{0},{1}'.format(*x)
            print '{0},{1}'.format(*y)
            print k
            print


s1
a,1
b,4
s1

s1
a,2
b,5
s1

s1
a,3
b,6
s1

s2
d,77
e,666
s2

s2
d,88
e,333
s2

s2
d,99
e,444
s2

説明

辞書内の各リストのキーを持つ値のペアを取得するので、

{'a':[1,2,3],'b':[4,5,6]}

に変更されます

[(('a', 1), ('b', 4)), (('a', 2), ('b', 5)), (('a', 3), ('b', 6))]

その方法は次のとおりです。

最初の行は、 の各キーと値を示していdます。辞書には順序がないため、昇順で反復処理できるように、これらを並べ替える必要があります。

キーの値は以下のような辞書で、キーと値のペアのタプルでソートされます。

d = {'a':[1,2,3],'b':[4,5,6]}
>>> sorted(d.items())
[('a', [1, 2, 3]), ('b', [4, 5, 6])]

次にproduct、すべての値とペアになっているキーを取得するために使用されます。

>>> [product(*x) for x in sorted(d.items())]
# iterates through [('a', 1), ('a', 2), ('a', 3)], [('b', 4), ('b', 5), ('b', 6)]

これは、関数 (この場合は) の引数がタプルで提供starmapされるように構築されたを使用して、より簡単に記述できます。ドキュメントを参照mapproduct

>>> starmap(product,sorted(d.items()))
# iterates through [('a', 1), ('a', 2), ('a', 3)], [('b', 4), ('b', 5), ('b', 6)]

それからリストはzippped一緒です。

>>> zip(*starmap(product,sorted(d.items())))
[(('a', 1), ('b', 4)), (('a', 2), ('b', 5)), (('a', 3), ('b', 6))]
于 2012-05-10T06:16:04.597 に答える
0

1 つの方法を次に示します。

>>> d={'s1':{'a':[1,2,3],'b':[4,5,6]},'s2':{'d':[77,88,99],'e':[666,333,444]}}
>>> for k in sorted(d.keys()):
...   v = d[k]
...   for i in xrange(len(v.values()[0])):
...     print k
...     for k2 in sorted(v.keys()):
...       v2 = v[k2]
...       print "%s,%d" % (k2, v2[i])
...     print "%s\n" % k
... 

これを実行すると、次のように出力されました。

s1
a,1
b,4
s1

s1
a,2
b,5
s1

s1
a,3
b,6
s1

s2
d,77
e,666
s2

s2
d,88
e,333
s2

s2
d,99
e,444
s2
于 2012-05-10T06:11:37.703 に答える