Python将字典值转换为列出和追加项目

时间:2013-02-14 03:15:10

标签: python python-2.7

我有一个名为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) 

...它几乎可以工作,因为我可以为每个值附加一个列表(万岁!)但是每个列表中的第一项(我的原始值)现在是它自己的一个项目列表(哎呀!)。 / p>

所以我最终得到了

dictdict[key1][subkey1]

对应于此

[[4], 'a1', a2]

但我希望它与此对应

[4, 'a1', a2]

此外,它可能不会说出来,但我是新手。

2 个答案:

答案 0 :(得分: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']
>>> 

答案 1 :(得分: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]}}

这使您可以将项目附加到嵌套列表。如果要附加其他列表,则可以使用+=extend()执行此操作;如果要一次添加单个元素,则可以使用append()