Python 用理解简化嵌套for循环
我试图通过一个字典简化一个嵌套for循环,以构建一个唯一值列表,即嵌套字典值中列出的房间大小。我已经把代码减少到了4行,但我很好奇是否可以通过列表理解以任何方式减少到1行 这是一个示例python字典: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
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可以做到这一点。