Python 为什么将字典转换为列表只返回键?

Python 为什么将字典转换为列表只返回键?,python,Python,我想知道为什么当我使用list(dictionary)时,它只返回键而不返回它们的定义到列表中 例如,我使用CSV reader将包含术语和定义的词汇表导入字典,然后使用内置的list()函数将字典转换为列表,它只返回列表中的键 这并不是一个真正的问题,因为它实际上让我的程序运行良好,我只是想知道它应该如何运行或运行 非常感谢您的帮助。您的意思是: >>> d = {'a': [1, 2, 3], 'b': [4, 5, 6]} >>> d.items() d

我想知道为什么当我使用list(dictionary)时,它只返回键而不返回它们的定义到列表中

例如,我使用CSV reader将包含术语和定义的词汇表导入字典,然后使用内置的list()函数将字典转换为列表,它只返回列表中的键

这并不是一个真正的问题,因为它实际上让我的程序运行良好,我只是想知道它应该如何运行或运行

非常感谢您的帮助。

您的意思是:

>>> d = {'a': [1, 2, 3], 'b': [4, 5, 6]}
>>> d.items()
dict_items([('a', [1, 2, 3]), ('b', [4, 5, 6])])
>>> list(d.items())
[('a', [1, 2, 3]), ('b', [4, 5, 6])]
>>> 
字典使
list(d)
给出它的键,然而
list(d.values())
将给出值

此外,在:

对字典执行list(d)返回字典中使用的所有键的列表


这说明了一切。

词汇表可以覆盖其键值,因此使用
list()
函数包装时,只会返回键值

这种行为是这样的:

>>> dictionary = {'a': [1, 2, 3], 'b': [4, 5, 6]}
>>> dictionary.items()
dictionary_items([('item_1', [1, 2]), ('item_2', [3, 4])])
您可以使用
dictionary.items()
从字典中获取所有项(键和值)

>>> list(dictionary.items())
[('item_1', [1, 2]), ('item_2', [3, 4])]
为什么我使用list(dictionary)时它只返回键。。。我只是想知道它是怎么表现的还是

对字典执行list(d)返回字典中使用的所有键的列表

因为(推测):

字典上的主要操作是使用某个键存储一个值,并提取给定键的值


这些价值并不是那么重要。键是唯一的标识符。值映射到键。所以dict是按键索引的,按键迭代的,等等。如果你想要一个键/值元组的列表,那么你必须明确地调用它,例如,
list(d.items())
简言之:本质上它是这样工作的,因为它是这样设计的。然而,如果我们考虑到在某些dict中
x对字典键执行成员检查,这是有意义的


Python代码经常迭代集合,但不知道它迭代的集合的类型:它可以是列表、元组、集合、字典、范围对象等

问题是,我们是否将词典视为一个集合,如果是,是什么的集合?如果我们想让它成为一个集合,第二个问题基本上有三个逻辑答案:我们可以将它视为键、值或键值对的集合。特别是键和键值对非常流行。例如,C#将字典视为
KeyValuePair
s的集合。Python提供了
.values()
.items()
方法来迭代值和键值对

字典主要用于快速查找键并检索相应的值。因此,某些dict中的
some\u键
将是一个敏感的查询,或某些dict中的
(some\u键,some\u值),因为后者可以检查键是否在字典中,然后检查它是否与
some\u值
匹配。然而,后者的灵活性较差,因为通常我们可能不想对相应的值感兴趣,我们只想检查字典是否包含某个键。此外,我们不能同时支持这两个用例,因为如果字典将包含两个元组作为键,那么这意味着它是不明确的,如果
(1,2)在某些情况下
意味着键
1
的值是
2
;或者如果
(1,2)
是字典中的一个键


由于Python的设计者决定在键上定义字典的成员资格检查,因此使字典在其键上是可编辑的更有意义。事实上,人们通常认为,如果某个表中的
x保持不变,那么列表(某个表)
中的
x也应该保持不变。如果字典的iterable将返回键值对的2元组(就像C#一样),那么如果我们将这些2元组列成一个列表,它将与字典本身的成员资格检查不一致。因为如果某个目录中的
2保持不变,列表(某个目录)
中的
2将失败。

因为字典是其键上的可编辑项。您可以使用
list(mydict.items())
检索列表中的2元组列表。它在键上迭代的事实使其与
中的
行为相协调:这意味着如果您在mydict中写入
x
,那么
x in list(mydict)
也将成功,反之亦然。可能重复感谢帮助的人。我真的不明白,因为我只是一个初级程序员。只要它能正常工作,我会在其他时间弄清楚这个理论:)那么,在dict上迭代(“循环”)或将其转换为列表的行为应该是什么?这里没有明显的“正确”答案。它被定义为对键进行迭代。我不这么认为?@Hydra17“我不这么认为”先试试吧!不,我的意思是,它可能是有效的,但我只是想从理论上理解为什么我使用的代码会有这样的行为。我想其他人已经解释过了,但是我不知道他们在说什么,因为我是个新手,哈哈,谢谢你的帮助:)@DavidZemens啊,你在我之前就有那个文档,我可以把它添加到我的帖子里吗。