【问题标题】:Unpacking iterables in Python3?在 Python3 中解包迭代?
【发布时间】:2017-03-09 12:43:04
【问题描述】:

为什么返回in sort_tup_from_list for key, val in tup: ValueError: not enough values to unpack (expected 2, got 1)

# list with tuples
lst = [("1", "2"), ("3", "4")]

# sorting list by tuple val key
def sort_tup_from_list(input_list):
    tmp = []
    print(tup)
    for tup in input_list:
        for key, val in tup:
            tmp.append((val, key))
            tmp.sort(reverse=True)
    return tmp

print(sort_tup_from_list(lst))

当我注释掉第二个 for 循环时,它会打印元组:

lst = [("1", "2"), ("3", "4")]
def sort_tup_from_list(input_list):
    tmp = []
    for tup in input_list:
        print(tup)
        # for key, val in tup:
        #     tmp.append((val, key))
        #     tmp.sort(reverse=True)
    return tmp

print(sort_tup_from_list(lst))

输出:

('1', '2')
('3', '4')
[]

所以,元组就在那里。他们为什么不自己打开包装?

【问题讨论】:

  • 因为你迭代了tup。而tup 的元素是单个字符串。如果您输入了两个字符的字符串,它们将解压成两个带有字符的变量。
  • 你是对的!添加两个字符的字符串按预期工作,但这不是我想要的。问题解决了;)

标签: list python-3.x tuples iterable-unpacking


【解决方案1】:

您的第二个 for 循环是遍历元组中的项目,但您正在抓取其中的两个项目。我想这就是你想要的:

# list with tuples
lst = [("1", "2"), ("3", "4")]

# sorting list by tuple val key
def sort_tup_from_list(input_list):
    tmp = []
    print(tmp)
    for key,val in input_list:
        tmp.append((val, key))
        tmp.sort(reverse=True)
    return tmp

print(sort_tup_from_list(lst))

【讨论】:

  • 好的,谢谢。我现在看到循环元组时我只能有一个可迭代的
猜你喜欢
  • 2021-06-24
  • 1970-01-01
  • 2018-07-27
  • 2019-10-07
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 2019-06-13
  • 2016-11-21
相关资源
最近更新 更多