1

dictdictという名前の辞書の辞書があります。次のようになります。

dictdict = { 'key1': {'subkey1': 4, 'subkey2': 7}, 
             'key2': {'subkey1': 6, 'subkey2': 8} }

...等々。dictdictには数十のキーがあり、各キーには数十のサブキーがあり、各サブキーは単一の整数値に対応しています。

新しい値のリストの最初の項目としてすでに存在する値を保持したまま、個々の値にリストを追加したいと思います。したがって、望ましい結果は、単一の整数に対応するサブキーの代わりに、整数と文字列を含むリストに対応することを除いて、以前と同じ辞書構造の辞書になります(したがって、最初の項目として私の元の値を含むリストが続きますさまざまな整数と文字列による)。

私は次のようなものになりたいです:

dictdict = { 'key1': {'subkey1': [4, 'apple', 37], 
                      'subkey2': [7, 'orange', 19]}, 
             'key2': {'subkey1': [6, 'kiwi', 76], 
                      'subkey2': [8, 'banana', 29]} }

これを試してみると...

#convert each nested value into a one item list
for key in dictdict:
    for subkey in dictdict[key]:
        dictdict[key][subkey] = [dictdict[key][subkey]] 

#now that our values are lists, append some items to the list
dictdict["key1"]["subkey1"].append('a1', a2) 

...各値のリストを追加できるので(やったー!)、ほとんど機能しますが、各リストの最初の項目(私の元の値)は、それ自体の1つの項目リストになりました(おっと!)。

だから私は

dictdict[key1][subkey1]

これに対応

[[4], 'a1', a2]

でもこれに対応して欲しいです

[4, 'a1', a2]

また、それはおそらく言うことなく行きますが、私は初心者です。

4

2 に答える 2

4
>>> dictdict = { 'key1': {'subkey1': 4, 'subkey2': 7}, 'key2': {'subkey1': 6, 'subkey2': 8} }
>>> dictdict["key1"]["subkey1"]
4
>>> for v1 in dictdict.values():
...     v1.update((k,[v]) for k,v in v1.iteritems())
... 
>>> dictdict["key1"]["subkey1"] += ['a1', 'a2']
>>> dictdict["key1"]["subkey1"]
[4, 'a1', 'a2']
>>> 
于 2013-02-14T03:48:05.183 に答える
0

次のように、dict内包表記を使用できます。

dictdict = {k:{kk:[vv] for (kk, vv) in v.iteritems()} for (k, v) in dictdict.iteritems()}

たとえば、これが最初の口述だった場合:

>>> dictdict
{'a': {'mm': 4}, 'b': {'qq': 6}}

その場合、結果は次のようになります。

>>> dictdict = {k:{kk:[vv] for (kk, vv) in v.iteritems()} for (k, v) in dictdict.iteritems()}
>>> dictdict
{'a': {'mm': [4]}, 'b': {'qq': [6]}}

これにより、ネストされたリストにアイテムを追加できるようになります。これは、別のリストを追加する場合、または+=一度に1つの要素を追加する場合に実行できます。extend()append()

于 2013-02-14T03:39:52.983 に答える