Python 如何通过更新OrderedICT来保持订单
请告诉我 说明 我想使用dict的更新方法更新类型为Python 如何通过更新OrderedICT来保持订单,python,python-3.5,ordereddictionary,Python,Python 3.5,Ordereddictionary,请告诉我 说明 我想使用dict的更新方法更新类型为orderedict的变量的值。 但是,在执行更新方法后,更新目标变量的OrderedDict类型将丢失,无法按预期进行输出 问题点: 丢失订购的ICT类型是否有故障 是否有另一种方法可以更新dict,同时保持OrderedDict的类型 下面是这个问题的一个例子 更新具有重新绑定受影响键的效果。简而言之,您正在做的是: # ... dic['b'] = OrderedDict() # ... dic['b'] = {'b1': 3, 'b2
orderedict
的变量的值。
但是,在执行更新方法后,更新目标变量的OrderedDict
类型将丢失,无法按预期进行输出
问题点:
OrderedDict
的类型更新具有重新绑定受影响键的效果。简而言之,您正在做的是:
# ...
dic['b'] = OrderedDict()
# ...
dic['b'] = {'b1': 3, 'b2': 4, 'b3': 5}
# ...
dic
中键'b'
的新值现在是通用的dict
。您正在尝试执行某些嵌套更新,这些更新不是现成提供的。您可以按照以下方式自行实施:
def update(d1, d2):
for k, v in d2.items():
if k in d1 and isinstance(v, dict) and isinstance(d1[k], dict):
update(d1[k], v)
else:
d1[k] = v
现在,您可以将其应用于您的案例:
update(dic, new_dic)
# OrderedDict([('a', 2), ('b', OrderedDict([('b1', 3), ('b2', 4), ('b3', 5)]))])
换行
new_dic = {'a': 2, 'b': {'b1': 3, 'b2': 4, 'b3': 5}}
到
没事的 我感谢你的回答。我第一次使用这个网站,但很快我就感到惊讶。非常感谢你。
from collections import OrderedDict
dic = OrderedDict()
dic['a'] = 1
dic['b'] = OrderedDict()
dic['b']['b1'] = 2
dic['b']['b2'] = 3
dic['b']['b3'] = 4
print(dic)
#> OrderedDict([('a', 1), ('b', OrderedDict([('b1', 2), ('b2', 3), ('b3', 4)]))]) # ok
new_dic = {'a': 2, 'b': {'b1': 3, 'b2': 4, 'b3': 5}}
new_dic['b'] = OrderedDict(new_dic['b'])
print(new_dic)
#> {'a': 2, 'b': OrderedDict([('b1', 3), ('b2', 4), ('b3', 5)])}
dic.update(new_dic)
print(dic)
#> OrderedDict([('a', 2), ('b', OrderedDict([('b1', 3), ('b2', 4), ('b3', 5)]))])
new_dic = {'a': 2, 'b': {'b1': 3, 'b2': 4, 'b3': 5}}
new_dic = {'a': 2, 'b': OrderedDict([('b1', 3), ('b2', 4), ('b3', 5)])}