2017-04-12 138 views
0

下面我有一个简单的程序。我打算做的是合并这两本字典。但我不想复制任何关于偏移量,限制,结果的值。只是标有“项目”的标签和包含更多字典的列表。字典包含一个列表包含更多的字典 - 更新

我的问题是,我可以拉下列表项,并将其存储在一个变量中,其中删除了其他键,但是当我将它添加到另一个列表中时,它将替换值而不是更新。

比如我有两点字典:

my_dict: {'status': 'ok', 'result': {'items': [{'Test': 1000}, {'Test2': 2000}]}} 
my_dict2: {'status': 'ok', 'result': {'items': [{'Test3': 1000}, {'Test4': 2000}]}} 

我的结果,我想到的是:

my_dict2: {'status': 'ok', 'result': {'items': [{'Test3': 1000}, {'Test4': 2000}, {'Test': 1000}, {'Test2': 2000}]}} 

,但我得到:

my_dict2: {'status': 'ok', 'result': {'items': [{'Test': 1000}, {'Test2': 2000}]}} 

代码:

my_dict = { 
    "status": "ok", 
    "result": { 
     "offset": 0, 
     "limit": 1000, 
     "total": 839, 
     "items": [ 
      { 
} 
] 
} 
} 

my_dict2 = my_dict 

my_dict.update({'result': {'items': [{'Test': 1000},{'Test2': 2000}]}}) 
my_dict_values = my_dict['result']['items'] 

my_dict2.update({'result': {'items': [{'Test3': 1000},{'Test4': 2000}]}}) 
print "Before: %s" % (my_dict2) 
my_dict2.update({'result': {'items': my_dict_values}}) 
print "After: %s" % (my_dict2) 
+1

要更新'my_dict2',当你真的只是想更新'my_dict2 [ '项目']'。 – Paul

+0

@Patrick Haugh感谢您编辑我的帖子。我忘了添加顶部的代码片段;-) –

+0

@Paul是的,这似乎正是我在做什么,接受的答案给了我正确的功能使用。谢谢哥们。 :-) –

回答

1

您的示例看起来很正常,因为如果字典中存在给定的键,字典update()方法将覆盖值。

my_dict2有钥匙'result'它有一个值{'items': [{'Test3': 1000},{'Test4': 2000}]}

你覆盖的'result'值与my_dict_values这是{'items': [{'Test': 1000}, {'Test2': 2000}]}

若要预期的结果,你可能会想尝试:

my_dict2['result']['items'].extend(my_dict_values) 
+0

啊谢谢!我知道这只是简单的我做错了。我只是误解了更新功能。 –

0

您可以利用更新重写“结果”值,也许转产

my_dict2.update({'result': {'items': my_dict_values}}) 

my_dict2['results']['items'] += my_dict_values 

会为你做它