当前位置: 首页 > 面试题库 >

python dict.update与下标添加单个键/值对

伍胡媚
2023-03-14
问题内容

每个学期,我至少有一位Python学生dict.update()用来添加单个键/值对,即:

mydict.update({'newkey':'newvalue'})

代替

mydict['newkey'] = 'newvalue'

我没有讲授这种方法,也不知道他们在哪里找到这种方法的示例,但是我告诉他们不要这样做,因为它效率较低(大概会创建一个新的2元素字典),并且它是非标准的。

老实说,我可以理解使用可见方法而不是这种语法的愿望-也许感觉与其他方法调用更加一致。但我认为这似乎是一种新手方法。

关于这一点,有人有什么智慧可言吗?


问题答案:

基准测试表明您对其性能影响的怀疑似乎是正确的:

$ python -m timeit -s 'd = {"key": "value"}' 'd["key"] = "value"'
10000000 loops, best of 3: 0.0741 usec per loop
$ python -m timeit -s 'd = {"key": "value"}' 'd.update(key="value")'
1000000 loops, best of 3: 0.294 usec per loop
$ python -m timeit -s 'd = {"key": "value"}' 'd.update({"key": "value"})'
1000000 loops, best of 3: 0.461 usec per loop

也就是说,它在我的机器上慢了大约六倍。但是,如果您需要最佳性能,那么Python已经不是您要使用的语言,因此,我建议您使用这种情况下最易读的语言。对于很多事情,这就是这种[]方式,尽管update在这样的情况下更易读:

configuration.update(
    timeout=60,
    host='example.com',
)

…或类似的东西。



 类似资料:
  • 问题内容: 使用Go的程序包,可以使用以下命令将特定于请求的数据传递到请求处理函数堆栈 这将创建一个新的副本,它是父副本,并包含可以用密钥访问的值val。 如果要在中存储多个键值对,该如何进行?我是否应该打几次电话,每次将上次通话收到的信息传递给?这看起来很麻烦。 还是我应该使用一个结构并将所有数据都放在那里,我只需要传递一个值(该结构),就可以从中访问所有其他值? 还是有办法将几个键值对传递给?

  • 假设我有一个Christmas list对象,它携带一个用于圣诞礼物的ArrayList和另一个用于收件人的字符串。我对这个客户端有以下方法: 所以基本上,我试图在Hazelcast IMAP中初始化一个新的键/值对。我尝试使用christmaslistimap.put()和christmaslistimap.set(),但它们似乎都不起作用。至少,我需要知道如何添加一个新的键让IMap识别。

  • 我有下面的JSON代码,有必要在每个记录的末尾添加键/值,如示例所示。我使用JOLT Transform处理器进行JSON转换。 输入: 预期输出: 非常感谢你的帮助。提前感谢。

  • 问题内容: 我在Java中有这样的双重经历。 现在,我想做的是通过循环在列表的零索引中添加5个值,在索引1中添加5个值。 第零个索引将具有值 索引1将具有值 并且所有这些值都按以下顺序存储在双精度数组中 我该怎么做? 问题答案: @Ahamed有一点,但是如果您坚持使用列表,那么可以有三个这样的arraylist: 编辑: 如果您在下面的列表中有这些值: 你想做的就是把它们结合起来,对吗?您可以尝

  • 嗨,我们正在使用spring sleuth进行跟踪。要创建新的span,我们使用注释@NewSpan;要向新span添加标记,我们使用@SpanTag。我们所面临的问题是,若我们将一个映射作为输入传递给我们想要为该映射中的每个键创建标记的方法,那个么这个映射就是一个问题。但是@SpanTag创建一个键,并将指定的映射作为其值。 有没有办法使用注释来实现这一点 @NewSpan public voi

  • 问题内容: 我有一个在Apache上运行的PHP服务器,收到很多这样的请求, _参数神秘地添加到了请求中。我正在尝试找出谁在这样做。 Apache前面有一个NetScaler。 问题答案: jQuery添加了类似的参数来绕开IE的缓存。 编辑:仅当获取选项为false时,才将其添加到获取请求中: