【问题标题】:Handling tuples as values within a dictionary (in list comprehensions)将元组作为字典中的值处理(在列表推导中)
【发布时间】:2015-05-01 06:53:40
【问题描述】:

我有一本这样的字典:

>>> pprint.pprint(d) {'a': ('abc', 'pqr', 'xyz'), 'b': ('abc', 'lmn', 'uvw'), 'c': ('efg', 'xxx', 'yyy')}

现在,给定一个变量x,我希望能够列出字典中元组中第一个元素等于x 的所有键。因此我这样做(在 Python 2.6 上):

>>> [ k for k, v in d if v[0] == x ]

我得到了

回溯(最近一次通话最后): 文件“”,第 1 行,在 ValueError:需要超过 1 个值才能解压

我该如何纠正这个问题?

【问题讨论】:

    标签: python list-comprehension


    【解决方案1】:

    你快到了,只是忘记了带有字典的.items():

    >>> d = {'a': ('abc', 'pqr', 'xyz'),
    ...  'b': ('abc', 'lmn', 'uvw'),
    ...  'c': ('efg', 'xxx', 'yyy')}
    >>> x = 'abc'
    >>> [ k for k, v in d.items() if v[0] == x ]
    ['a', 'b']
    

    如果您不想使用.items,您也可以对密钥本身进行迭代:

    >>> [ k for k in d if d[k][0] == x ]
    ['a', 'b']
    

    【讨论】:

    • 所以这意味着for k,v in d 是一个无效的声明?它总是必须是.items()吗?
    • @freecode 是的。当您执行k, v 时,您暗示在这种情况下将值解压缩为 2;但是,由于您不使用.items(或.iteritems),因此您基本上无法解压缩这些值,这会抛出ValueError。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2020-02-13
    相关资源
    最近更新 更多