【问题标题】:How to find length of dictionary values如何查找字典值的长度
【发布时间】:2014-11-29 04:10:24
【问题描述】:

我对这一切都很陌生,所以这可能是一个菜鸟问题..但我正在寻找字典值的长度......但我不知道如何做到这一点。

例如,

d = {'key':['hello', 'brave', 'morning', 'sunset', 'metaphysics']}

我想知道有没有办法可以找到字典值的 len项目数

谢谢

【问题讨论】:

  • 如下所述,您将如何处理您的长度...每个键的长度或只是长度列表?

标签: python list dictionary


【解决方案1】:

当然。在这种情况下,您只需:

length_key = len(d['key'])  # length of the list stored at `'key'` ...

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

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 -- 是的,我很难为那个名字起个好名字。 . .
  • @mgilson 我会选择foobar :)
  • @mgilson,我可以说明为什么这会有所帮助。假设您有一个长度相同的列表字典,但您现在还没有键,并且您希望先遍历列表值,然后再遍历键。在这种情况下,您必须执行 n = len(list(dict.items())[0]) 然后遍历列表值
【解决方案2】:

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

创建我们的测试字典,见list and dict comprehensions:

>>> 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

获取dict中所有值的长度之和:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • @squinguy 我认为因为 dict 不保留顺序,所以在哪个列表项对应于哪个 dict 条目方面会模棱两可。
    • @user1269942 这很公平,尽管没有提到将值与它们的键相关联。我认为它只是查看所有值的长度。
    • 是的,一个公平的解释!我没有想到...我只是添加了一条评论,让他们知道存在歧义。
    【解决方案4】:

    我有一个常见的用例是一个 numpy 数组或列表的字典,我知道它们的长度都相同,我只需要知道其中一个(例如,我正在绘制时间序列数据,每个时间序列都有相同的时间步数)。我经常用这个:

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

    【讨论】:

    • 很好的解决方案。但很难理解它是如何工作的。你能详细说明一下吗?
    • @lpnorm 从内到外最容易理解:iter(d.values()) 在字典的值上创建一个迭代器对象,next 从迭代器中检索第一个对象,len 告诉你有多少元素在那个检索到的对象中。
    【解决方案5】:

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

    如果你知道关键:
    print(len(dict[key]))

    其他:
    val=[len(i) for i in dict.values()]
    print(val[0])
    # for printing length of 1st key value or length of values in keys if all keys have same amount of values.

    【讨论】:

    • 你应该使用'key'而不是key,否则它会给你NameError: name 'key' is not defined
    【解决方案6】:
    d={1:'a',2:'b'}
    sum=0
    for i in range(0,len(d),1):
       sum=sum+1
    i=i+1
    print i
    

    输出=2

    【讨论】:

    • 感谢您提供此代码 sn-p,它可能会提供一些有限的短期帮助。一个正确的解释would greatly improve 它的长期价值通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。
    猜你喜欢
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    相关资源
    最近更新 更多