如何找到字典值的长度

49

我对这一切都很陌生,所以这可能是一个初学者的问题...但我想找到字典值的长度...但我不知道怎么做。

例如:

d = {'key':['hello', 'brave', 'morning', 'sunset', 'metaphysics']}
我想知道是否有办法找到字典值的长度或项目数量。
谢谢。

如下所讨论的,使用长度的方式很重要......对于每个键使用长度还是仅使用长度列表? - user1269942
6个回答

51
当然。在这种情况下,您只需执行以下操作:
length_key = len(d['key'])  # length of the list stored at `'key'` ...

很难说你为什么想要这个,但是也许创建另一个将键映射到值长度的字典会很有用:

length_dict = {key: len(value) for key, value in d.items()}
length_key = length_dict['key']  # length of the list stored at `'key'` ...

+1,但是“length_key”作为变量名有点误导人,因为它表示的是给定值的长度。 - user1269942
1
@user1269942 -- 是的,我一直在为它想一个好名字,但是很难。. . - mgilson
@mgilson 我会选择 foobar :) - twilsonco
@mgilson,我可以说出为什么这会有帮助。假设您有一个字典,其中包含所有长度相同但您还不知道键的列表,并且您想先循环列表值,然后再循环键。在这种情况下,您必须执行以下操作: n = len(list(dict.items())[0]) 然后循环列表值。 - csar

17

让我们进行一些实验,看看如何获取/解释字典中不同值的长度。

创建我们的测试字典,请参见列表和字典生成式

>>> my_dict = {x:[i for i in range(x)] for x in range(4)}
>>> my_dict
{0: [], 1: [0], 2: [0, 1], 3: [0, 1, 2]}
获取特定键值的长度:
>>> my_dict[3]
[0, 1, 2]
>>> len(my_dict[3])
3

获取每个键对应的值的长度字典:

>>> key_to_value_lengths = {k:len(v) for k, v in my_dict.items()}
{0: 0, 1: 1, 2: 2, 3: 3}
>>> key_to_value_lengths[2]
2

获取字典中所有值的长度总和:

>>> [len(x) for x in my_dict.values()]
[0, 1, 2, 3]
>>> sum([len(x) for x in my_dict.values()])
6

11

要找到字典中所有值的长度,可以这样做:

lengths = [len(v) for v in d.values()]

@squinguy 我认为因为字典不保留顺序,用这种方式做会在哪个列表项对应哪个字典条目方面产生歧义。 - user1269942
@user1269942 这很公平,尽管没有提到将值与它们的键相关联。我理解为只是查看所有值的长度。 - squiguy
哑,一个公正的解释!我没有想到过这点...我刚刚添加了一条评论告诉他们存在歧义。 - user1269942

7

我经常遇到的一种情况是,我有一个包含numpy数组或列表的字典,我知道它们的长度都相同,我只需要知道其中一个(例如,我正在绘制时间序列数据,每个时间序列具有相同数量的时间步)。 我经常使用以下方法:

length = len(next(iter(d.values())))

很棒的解决方案。但是很难理解它是如何工作的。你能详细说明一下吗? - lpnorm
1
@lpnorm 从内到外跟踪最容易:iter(d.values()) 创建一个迭代器对象,该对象遍历字典的值,next 检索迭代器中的第一个对象,而 len 告诉您检索到的对象中有多少个元素。 - adamconkey

1

让字典为:
dict={'key':['value1','value2']}

如果您知道键名:
print(len(dict[key]))

否则:
val=[len(i) for i in dict.values()]
print(val[0])
# 用于打印第一个键值或者如果所有键都有相同数量的值,则打印键值的长度。


你应该使用 'key' 而不是 key,否则会出现 NameError: name 'key' is not defined 的错误。 - stardust

0
d={1:'a',2:'b'}
sum=0
for i in range(0,len(d),1):
   sum=sum+1
i=i+1
print i

输出=2


1
感谢您提供这段代码片段,它可能会在短期内提供一些有限的帮助。通过展示为什么这是一个好的解决方案,适当的解释将极大地提高其长期价值,并使其对未来具有类似问题的读者更有用。请编辑您的答案以添加一些解释,包括您所做的假设。 - Toby Speight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接