python字典键值对的值可以重复吗_当字典键相同时,为什么Python只保留最后一个键值对?...

本文探讨了Python字典在遇到重复键时保留最后一个值的特性,回顾了Python 1.0版本的设计决策,解释了 Guido 选择此设计的原因,以及为何至今未作更改。讨论了不同编程语言对此问题的处理方式,并指出这一设计可能出于效率和简洁性的考量。
摘要由CSDN通过智能技术生成

假设我创建了一个字典a_dictionary,其中两个键值对具有相同的键:

In [1]: a_dictionary = {'key': 5, 'another_key': 10, 'key': 50}

In [2]: a_dictionary

Out[2]: {'key': 50, 'another_key': 10}

为什么Python在这里选择保留最后一个键值对而不是抛出关于使用相同键的错误(或至少引发警告)?

我看到它的方式,这里的主要缺点是你可能会丢失数据而不知道.

(如果相关,我在Python 3.6.4上运行上面的代码.)

解决方法:

如果你的问题是为什么Python dict显示最初是以这种方式设计的……可能没有人知道.

我们知道什么时候做出决定. Python 0.9.x(1991-1993)没有dict显示; Python 1.0.x(1994)做到了.他们的工作方式与今天完全相同.来自文档:1

A dictionary display yields a new dictionary object.

The key/datum pairs are evaluated from left to right to define the

entries of the dictionary: each key object is used as a key into the

dictionary to store the corresponding datum.

Restrictions on the types of the key values are listed earlier in

section types.

Clashes between duplicate keys are not detected; the last

datum (textually rightmost in the display) stored for a given key

value prevails.

并且,测试它:

$./python

Python 1.0.1 (Aug 21 2018)

Copyright 1991-1994 Stichting Mathematisch Centrum, Amsterdam

>>> {'key': 1, 'other': 2, 'key': 3}

{'other': 2, 'key': 3}

但是没有提到为什么Guido选择了这个设计:

> 1.0文档.

> Design & History FAQ.

> Guido的History of Python博客.

>我能想到的任何其他地方都可能有它.

此外,如果你看一下具有相似功能的不同语言,其中一些语言保留最后一个键值对,如Python,有些保留一个任意的键值对,有些会产生某种错误…每个都有足够的你可以’认为这是一个明显的设计,这就是Guido选择它的原因.

如果你想要一个疯狂的猜测,可能并不比你自己想象的更好,这是我的:

编译器不仅可以,而且可以通过创建空字典并将键值对插入其中来有效地构造文字中的const值.因此,默认情况下,您将获得重复允许的最后一键胜利语义;如果你想要其他任何东西,你必须编写额外的代码.并且,没有令人信服的理由选择一个而不是另一个,Guido选择不写额外的代码.

那么,如果设计没有令人信服的理由,为什么没有人试图在24年后改变它呢?

好吧,有人提交了一个功能请求(b.p.o. #16385),使重复键在3.4中出错.

但是当它被建议把它提起来时显然已经消失了.)它可能会出现在其他几次,但显然没有人希望它变得非常糟糕以推动它.

与此同时,他最接近Python现有行为的实际论点是Terry J. Reedy的评论:

Without more use cases and support (from discussion on python-ideas), I think this should be rejected. Being able to re-write keys is fundamental to Python dicts and why they can be used for Python’s mutable namespaces. A write-once or write-key-once dict would be something else.

As for literals, a code generator could depend on being able to write duplicate keys without having to go back and erase previous output.

1.我不认为1.0的文档可以在任何地方直接链接,但您可以下载the whole 1.0.1 source archive并从TeX源构建文档.

标签:python,dictionary,python-3-x

来源: https://codeday.me/bug/20190527/1161868.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值