更新嵌套字典中的Set

时间:2017-03-06 22:42:00

标签: python dictionary set

我正在尝试更新嵌套字典中的Set,问题是它是否添加了一个新的Set而不是第二次更新当前的Set。

building = {}
building.update({'APT-14D':{}})
building['APT-14D'].setdefault('amenities', set()).add(('hot-water','gas-stove','non-smoke'))
building['APT-14D'].setdefault('amenities', set()).add(('hot-water','non-stove','non-smoke'))

我收到以下内容:

{'APT-14D': {'amenities': {('hot-water', 'non-stove', 'non-smoke'), ('hot-water', 'gas-stove', 'non-smoke')}}}

而不是:

{'APT-14D': {'amenities': {('hot-water', 'non-stove', 'non-smoke')}}}

如何更新当前值而不是在嵌套字典中创建新的Set?

P.S。不同的值为non-stovegas-stove

1 个答案:

答案 0 :(得分:1)

你没有制作新的套装,而是在你的套装中添加一个不同的元组。如果要将元组的每个元素添加到集合中,请使用.update

In [4]: building = {}
   ...: building.update({'APT-14D':{}})
   ...: building['APT-14D'].setdefault('amenities', set()).update(('hot-water','gas-stove','non-smoke'))
   ...: building['APT-14D'].setdefault('amenities', set()).update(('hot-water','non-stove','non-smoke'))
   ...:

In [5]: building
Out[5]:
{'APT-14D': {'amenities': {'gas-stove',
   'hot-water',
   'non-smoke',
   'non-stove'}}}

重读你的问题,我注意到这甚至不是你想要的。现在看来,你甚至不想要一个集合,只需要一个元组,只需用任何新值替换该元组:

In [16]: building = {'APT-14D':{}}

In [17]: building['APT-14D']['amenities'] =  ('hot-water','gas-stove','non-smoke')

In [18]: building['APT-14D']['amenities'] =  ('hot-water','non-stove','non-smoke')

In [19]: building
Out[19]: {'APT-14D': {'amenities': ('hot-water', 'non-stove', 'non-smoke')}}