【问题标题】:reducing with a list comprehension in python用python中的列表理解减少
【发布时间】:2012-06-16 21:37:20
【问题描述】:

有没有更好的方法来编写以下 for 循环?

my_list = []
for key in my_set_of_keys:
    for val1,val2 in my_dict[key]:
        my_list.append((key,val2,val1))

我的尝试可能......有点漫无边际......

my_list = list(chain.from_iterable(map(
    lambda key: [(key,val2,val1) for (val1,val2) in my_dict[key]],
    my_set_of_keys)))

my_list = reduce(lambda x,y: x+y,(map(
    lambda key: [(key,val2,val1) for (val1,val2) in my_dict[key]],
    my_set_of_keys)))

my_list = reduce(list.__add__, (map(
    lambda key: [(key,val2,val1) for (val1,val2) in my_dict[key]],
    my_set_of_keys)))

my_dict 看起来像这样:

'keyA' : { ('foo',1), ('bar',2), ('baz',3) }
'keyB' : { ... }

my_set_of_keys:

{ 'keyA', 'keyC', ... } 

【问题讨论】:

    标签: python for-loop nested list-comprehension reduce


    【解决方案1】:

    这可能对你有用:

    my_list = [(key, v2, v1) for key in my_set_of_keys for v1, v2 in my_dict[key]]
    

    【讨论】:

    • 我以前试过这个,但我还是会。 nodepaths = [(key,val2,val1) for val1,val2 in graph[key] for key in nodeset] NameError: global name 'key' is not defined
    • @ThemanontheClaphamomnibus:尝试我的回答中的解决方案。问题实际上是循环的顺序。如果您定义了 my_set_of_keysmy_dict 并具有正确的类型,这必须有效。
    • 我会尽快接受。那个命令已经把我扔了好多年了!在我看来它仍然是倒退的......但有效!
    猜你喜欢
    • 2014-05-16
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 2020-09-03
    相关资源
    最近更新 更多