【问题标题】:How to iterate over two different iterable objects如何迭代两个不同的可迭代对象
【发布时间】:2023-03-07 09:07:01
【问题描述】:

我有以下代码:

reader = csv.DictReader(f, delimiter='\x01', lineterminator="\x02")
for line in (reader + my_dict_of_values):
    do_something()

有没有一种方法可以像上面那样迭代两种不同的类型而不调用另一个函数?否则我会得到:TypeError: unsupported operand type(s) for +: 'instance' and 'dict'

【问题讨论】:

  • 所以你想遍历reader,然后遍历my_dict_of_values?在这种情况下,听起来像是两个 for 循环。请不要忘记字典是无序的。
  • @Dan -- 确切地说 -- 我在 for 循环中只有大约 100 行代码,所以如果可能的话,我想把它压缩成一个 for 循环。
  • my_dict_of_values 真的是dict 吗?是否要遍历 dict
  • 哦好的,你可以尝试在for循环之前组合字典,这样你就有1个字典了。 stackoverflow.com/questions/8930915/…
  • @David542,等等,你只是想在reader 中的dicts 中再添加一个字典吗?

标签: python


【解决方案1】:

这应该做你想做的:

import csv

from itertools import chain

reader = csv.DictReader(f, delimiter='\x01', lineterminator="\x02")
my_dict_of_values = {}  # whatever goes here

for line in chain(reader, my_dict_of_values):
    do_something(line)

【讨论】:

  • 非常有帮助,我以前不知道。谢谢。
  • @David542,你确定这对你有用吗?您想遍历reader 中的每个dict,然后遍历my_dict_of_values 中的每个key
【解决方案2】:

所以你想遍历 reader,然后遍历 my_dict_of_values?在这种情况下听起来像是两个 for 循环。

完全正确——我在 for 循环中只有大约 100 行代码,所以如果可能的话,我想将它压缩成一个 for 循环

你需要做的是让你的循环体成为一个函数。然后你可以在两个循环中使用它。变化:

for line in reader:
    [100 lines of code]

到:

def do_something(line):
    [100 lines of code]

for line in reader:
    do_something(line)
for key in my_dict_of_values:
    do_something(key)

【讨论】:

    猜你喜欢
    • 2019-12-03
    • 2021-10-25
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 2014-04-26
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多