包含更多dicts的列表的Dict - 更新

时间:2017-04-12 13:30:34

标签: python python-2.7 list dictionary

下面我有一个简单的程序。我打算做的是合并两个词典。但我不想复制有关偏移,限制和结果的任何值。只是标有“Items”的键和下面的列表,包含更多的词典。

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

例如,我有两个词典:

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)

2 个答案:

答案 0 :(得分:1)

您的示例似乎正常,因为如果字典中存在给定键,则dictionary 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)

答案 1 :(得分:0)

你正在压倒'结果'使用更新的值,也许更改行

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

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

会为你做这件事

相关问题