Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用理解简化嵌套for循环_Python_Dictionary_List Comprehension_Dictionary Comprehension - Fatal编程技术网

Python 用理解简化嵌套for循环

Python 用理解简化嵌套for循环,python,dictionary,list-comprehension,dictionary-comprehension,Python,Dictionary,List Comprehension,Dictionary Comprehension,我试图通过一个字典简化一个嵌套for循环,以构建一个唯一值列表,即嵌套字典值中列出的房间大小。我已经把代码减少到了4行,但我很好奇是否可以通过列表理解以任何方式减少到1行 这是一个示例python字典: otas = { Orbitz: { u'Las Vegas': [u'1 Bedroom Suite B-side'] }, Expedia: { u'Los Angeles': [u'2 Bedroom Lockoff', u'1 Be

我试图通过一个字典简化一个嵌套for循环,以构建一个唯一值列表,即嵌套字典值中列出的房间大小。我已经把代码减少到了4行,但我很好奇是否可以通过列表理解以任何方式减少到1行

这是一个示例python字典:

otas = {
    Orbitz: {
        u'Las Vegas': [u'1 Bedroom Suite B-side']
    },
    Expedia: {
        u'Los Angeles': [u'2 Bedroom Lockoff', u'1 Bedroom Deluxe (A-side)', u'3 Bedroom Deluxe']
    },
    Priceline: {
        u'New York': [u'1 Bedroom Deluxe (A-side)']
    },
    Travelocity: {
        u'Chicago': [u'1 Bedroom Deluxe (A-side)', u'2 Bedroom Lockoff']
    }
}
这是四行代码:

rooms = []
for resort in otas.values():
    for room in resort.values():
        rooms += [r for r in room if r not in rooms]

我知道我现在做这件事的方式没有问题。我很好奇这是否可以实现。

我想你可以使用三重嵌套集

rooms = {roomtype
         for service  in otas
         for location in otas[service]
         for roomtype in otas[service][location]}

如果您想要返回列表,只需将其包装在对列表的调用中。

我想您可以使用三重嵌套集

rooms = {roomtype
         for service  in otas
         for location in otas[service]
         for roomtype in otas[service][location]}

如果您想要返回列表,只需将其包装在呼叫列表中。

如果您想要的是otas字典中没有重复的房间,那么:

rooms = set([r for resort in otas.values() for room in resort.values() for r in room])

如果您想要的是otas字典中没有重复的房间,那么:

rooms = set([r for resort in otas.values() for room in resort.values() for r in room])
你可以试试这个

rooms = list(set(reduce(lambda x, y: x+y, [item for x in otas.values() for item in x.values()])))
你可以试试这个

rooms = list(set(reduce(lambda x, y: x+y, [item for x in otas.values() for item in x.values()])))

回答得好!我没有意识到用Python可以做到这一点。回答得很好!我没有意识到用Python可以做到这一点。