在Python中向字典添加新项目[重复]
Posted
技术标签:
【中文标题】在Python中向字典添加新项目[重复]【英文标题】:Add a new item to a dictionary in Python [duplicate] 【发布时间】:2011-09-18 22:57:56 【问题描述】:我想将一个项目添加到 Python 中的现有字典中。例如,这是我的字典:
default_data =
'item1': 1,
'item2': 2,
我想添加一个新项目:
default_data = default_data + 'item3':3
我怎样才能做到这一点?
【问题讨论】:
docs.python.org/tutorial/datastructures.html#dictionariesdefault_data['item3'] = 3
不是一个选项?
@machine 向往:meta.stackexchange.com/questions/5280/embrace-the-non-googlers
我不敢相信这个内联解决方案还没有发布。我们可以使用 **default_data, 'item3':3
返回更新后的数组。对于 lambda 函数和列表推导非常有用。 (需要PEP 448 (Python 3.5))
@GlabbichRulz:你的解决方案正是我希望在这里找到的优雅方法——你愿意把你的评论变成答案,这样我就可以投票了吗?还会给我一个直接链接,我可以保存以供将来参考...
【参考方案1】:
default_data['item3'] = 3
像py一样简单。
另一种可能的解决方案:
default_data.update('item3': 3)
如果您想一次插入多个项目,这很好。
【讨论】:
对线程坏死感到抱歉,但是在添加一项时是否有任何理由偏爱一种方法而不是另一种方法? @Warrick 除了个人品味,绝对没有区别。就我个人而言,我发现第一个对于一个项目来说更直观。 哪个更快? @user3067923 这纯粹是猜想,但我想象第一个会稍微快一些,因为它会在适当的位置改变 dict,而第二个必须创建一个临时 dict ,然后变异,然后垃圾收集临时字典。我需要对其进行基准测试才能明确地说出来。 @ChrisEberle 或者应该是 O(1),或者至少非常接近它,对吗?【参考方案2】:可以这么简单:
default_data['item3'] = 3
正如Chris' answer 所说,您可以使用update 添加多个项目。一个例子:
default_data.update('item4': 4, 'item5': 5)
请参阅有关dictionaries as data structures 和dictionaries as built-in types 的文档。
【讨论】:
有助于了解您可以在更新中执行多个项目。【参考方案3】:我突然想到,您实际上可能在问如何为字典实现 +
运算符,以下似乎可行:
>>> class Dict(dict):
... def __add__(self, other):
... copy = self.copy()
... copy.update(other)
... return copy
... def __radd__(self, other):
... copy = other.copy()
... copy.update(self)
... return copy
...
>>> default_data = Dict('item1': 1, 'item2': 2)
>>> default_data + 'item3': 3
'item2': 2, 'item3': 3, 'item1': 1
>>> 'test1': 1 + Dict(test2=2)
'test1': 1, 'test2': 2
请注意,这比使用 dict[key] = value
或 dict.update()
开销更大,因此我建议不要使用此解决方案,除非您打算创建新字典。
【讨论】:
如果不想实现自己的算子,也可以dict(default_data.items() + 'item3': 3.items())
@Pakman 的评论在 Python3 中不起作用(参见:***.com/questions/13361510/…)
对于 Python 3,仍然使用@Pakman 注释的快速修复方法是将dict.items()
的输出转换为list
,如下所示:dict(list(default_data.items()) + list('item3': 3.items()))
,或者甚至使用更惯用的:@ 987654330@以上是关于在Python中向字典添加新项目[重复]的主要内容,如果未能解决你的问题,请参考以下文章