Python将字典值转换为列表和附加项

Python将字典值转换为列表和附加项,python,python-2.7,Python,Python 2.7,我有一本字典,名为dict,看起来像: dictdict = { 'key1': {'subkey1': 4, 'subkey2': 7}, 'key2': {'subkey1': 6, 'subkey2': 8} } dictdict = { 'key1': {'subkey1': [4, 'apple', 37], 'subkey2': [7, 'orange', 19]}, 'key2'

我有一本字典,名为dict,看起来像:

dictdict = { 'key1': {'subkey1': 4, 'subkey2': 7}, 
             'key2': {'subkey1': 6, 'subkey2': 8} }
dictdict = { 'key1': {'subkey1': [4, 'apple', 37], 
                      'subkey2': [7, 'orange', 19]}, 
             'key2': {'subkey1': [6, 'kiwi', 76], 
                      'subkey2': [8, 'banana', 29]} }
……等等
dict
有几十个键,每个键有几十个子键,每个子键对应一个整数值

我想在每个单独的值上附加一个列表,保留已经存在的值作为新值列表中的第一项。因此,期望的结果将具有与之前相同的字典字典结构,除了对应于单个整数的子键之外,它们将对应于包含整数和字符串的列表(因此,包含我的原始值的列表作为第一项,后跟各种整数和字符串)

我想以这样的方式结束:

dictdict = { 'key1': {'subkey1': 4, 'subkey2': 7}, 
             'key2': {'subkey1': 6, 'subkey2': 8} }
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) 
…它几乎可以工作,因为我可以为每个值添加一个列表(万岁!),但是每个列表中的第一项(我的原始值)现在是一个自己的单项列表(oops!)

所以我最终得到了

dictdict[key1][subkey1]
与此相对应

[[4], 'a1', a2]
但我希望它与此相对应

[4, 'a1', a2]

此外,它可能会说,但我是个新手。

你可以使用听写理解,如:

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()

可以使用dict理解,如下所示:

dictdict = {k:{kk:[vv] for (kk, vv) in v.iteritems()} for (k, v) in dictdict.iteritems()}
>>> 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']
>>> 
例如,如果这是您最初的口述:

>>> 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()

您的代码几乎对我有效。将单个值转换为列表的循环至少工作得很好。
append
调用有缺陷。你确定没有两次错误地运行循环吗?
.append
只需要一个参数try
dictdict[“key1”][“subkey1”]+=['a1',a2']
你的代码几乎适合我。将单个值转换为列表的循环至少工作得很好。
append
调用有缺陷。你确定没有两次错误地运行循环吗?
.append
只需要一个参数try
dictdict[“key1”][“subkey1”]+=['a1',a2']
这个答案和对附加说明的编辑有助于加深我对字典的理解,因为我对python和编程都是新手。我选择@gnibbler-answer,因为语法对我来说更容易理解。不过谢谢。这个答案和对附加说明的编辑有助于加深我对词典的理解,因为我对python和一般编程都是新手。我选择@gnibbler-answer,因为语法对我来说更容易理解。谢谢。这解决了我的问题。不再将不需要的单个项目列表作为我所需列表中的第一项。谢谢,这解决了我的问题。不再将不需要的单个项目列表作为我所需列表中的第一项。谢谢@gnibbler
>>> 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']
>>>