【问题标题】:Obtaining length of list as a value in dictionary in Python 2.7在 Python 2.7 中获取列表长度作为字典中的值
【发布时间】:2013-06-12 13:11:48
【问题描述】:

我有两个列表和字典如下:

>>> var1=[1,2,3,4]
>>> var2=[5,6,7]
>>> dict={1:var1,2:var2}

我想从我的字典中找到可变元素的大小,即键值的长度。 在查找help('dict') 后,我只能找到返回键数的函数,即dict.__len__()。 我尝试了 Java 方法(希望它可以工作),即len(dict.items()[0]),但它评估为2

我打算找到这个:
第一个键的值长度:4
第二个键的值长度:3

当列表是字典的一部分而不是单独的列表时,以防它们的长度为len(list)

任何建议都会有很大帮助。

【问题讨论】:

    标签: python list python-2.7 dictionary


    【解决方案1】:

    dict.items() 是一个包含字典所有键/值元组的列表,例如:

    [(1, [1,2,3,4]), (2, [5,6,7])]
    

    因此,如果您写len(dict.items()[0]),那么您会询问该项目列表的第一个元组的长度。由于字典的元组始终是 2 元组(对),因此您得到长度 2。如果您想要给定键的值的长度,请编写:

    len(dict[key])
    

    Aso:尽量不要使用标准类型的名称(如strdictset 等)作为变量名。 Python 不会抱怨,但它会隐藏类型名称并可能导致意外行为。

    【讨论】:

    • 在 Python 3.6.3(可能还有其他 3.x 版本)中,上述解决方案不起作用。你必须写:len(list(dict.items())[0])
    【解决方案2】:

    您可以使用dict comprehension 执行此操作,例如:

    >>> var1 = [1,2,3,4]
    >>> var2 = [5,6,7]
    >>> d = {1:var1, 2:var2}
    >>> lengths = {key:len(value) for key,value in d.iteritems()}
    >>> lengths
    {1: 4, 2: 3}
    

    顺便说一句,您的“Java”方法也几乎可以工作(但相当不符合 Python 标准)。您只是使用了错误的索引:

    >>> d.items()
    [(1, [1, 2, 3, 4]), (2, [5, 6, 7])]
    >>> d.items()[0]
    (1, [1, 2, 3, 4])
    >>> len(d.items()[0][1])
    4
    

    【讨论】:

      【解决方案3】:
      >>>for k,v in dict.iteritems():
         k,len(v)
      

      答案:-

      (1, 4)
      (2, 3)
      

      >>>var1=[1,2,3,4]
      >>>var2=[5,6,7]
      >>>dict={1:var1,2:var2}
      

      答案:-

      >>>[len(v) for k,v in dict.iteritems()]
      [4, 3]
      

      【讨论】:

      • 请注意,这也可以返回[3, 4] 作为输出(dicts 没有任何特定的顺序)。因此,最好添加一些解释,否则可能会进一步混淆 OP。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-28
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 2012-03-03
      相关资源
      最近更新 更多