Python 对dict列表应用dict()返回意外值。dict()是如何工作的?

Python 对dict列表应用dict()返回意外值。dict()是如何工作的?,python,python-3.x,dictionary,python-3.8,Python,Python 3.x,Dictionary,Python 3.8,Python 3.8.6 我有一个目录,上面有相似的键。像这个: 数据=[ { “类型”: '个人','详细信息':{} }, { “类型”:“个人”, '详细信息':{} } ] 出乎意料的是,dict(data)返回了{'type':'details'} 我认为这段代码应该返回一个异常,但它没有 那里发生了什么事? 为什么Python认为这是正确的行为? 这种行为有什么有用的例子吗?调用dict()方法之一的模糊用法 否则,位置参数必须是iterable对象。 iterable中的每个项

Python 3.8.6

我有一个目录,上面有相似的键。像这个:

数据=[
{
“类型”:
'个人','详细信息':{}
}, 
{
“类型”:“个人”,
'详细信息':{}
}
]
出乎意料的是,
dict(data)
返回了
{'type':'details'}

我认为这段代码应该返回一个异常,但它没有

那里发生了什么事?
为什么Python认为这是正确的行为?

这种行为有什么有用的例子吗?

调用dict()方法之一的模糊用法

否则,位置参数必须是iterable对象。 iterable中的每个项本身必须是一个正好有两个项的iterable 物体。每个项目的第一个对象成为新项目中的一个键 字典,第二个对象为相应的值。如果有钥匙 多次发生时,该键的最后一个值将成为 新字典中的对应值

迭代字典会为您提供它的键,因此无意中您的参数完全符合要求


没有人会像你刚才那样调用
dict()
。调用类似于
dict(enumerate(my_list))
的东西是一个更有趣的用例。

接受(除其他选项外)一个键值对的iterable。一个包含两个键的字典列表满足这个要求。为什么您希望它会引发异常?你试过看文档了吗?我从
dict()
的角度理解这一点的合理方法是看
list(数据[0])
[list(d)for d in data]
哇,现在真的很有意义了。然而,我仍然感到惊讶的是,您可以将字典解压成键,如
key\u one,key\u two=data[0]
。为什么它解包到键,而不是(键,值)的元组?因为按键迭代?@inyutin。这是我在编写python时经常犯的错误之一。我在我的dict.items()中反复为a,b写
,而不是为a,b写
。我不知道为什么Python之神认为迭代字典就意味着迭代它的键,但它就是这样做的。是的,没有人应该使用这样的代码。但是,我有一个服务可以验证pydantic的请求。模型指定in应接受dict
。但是,另一个服务错误地发送了
列表
,我很困惑没有错误。@inyutin您可以执行
dict([d.items()表示数据中的d])
。@inyutin请参见